aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2009-03-03 18:28:20 -0800
committerThe Android Open Source Project <initial-contribution@android.com>2009-03-03 18:28:20 -0800
commitff131cbc194ddc9f28f161a4c020a950d9daa27e (patch)
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904
parentb651aeec8a719c9f639ef710423e29463123d4f6 (diff)
downloadclearsilver-ff131cbc194ddc9f28f161a4c020a950d9daa27e.tar.gz
auto import from //depot/cupcake/@135843
-rw-r--r--Android.mk1
-rw-r--r--CS_LICENSE61
-rw-r--r--ClearSilver.h77
-rw-r--r--INSTALL124
-rw-r--r--LICENSE20
-rw-r--r--Makefile131
-rw-r--r--README66
-rw-r--r--README.python65
-rw-r--r--acconfig.h65
-rw-r--r--aclocal.m4929
-rwxr-xr-xautogen.sh11
-rw-r--r--autom4te.cache/output.07729
-rw-r--r--autom4te.cache/requests111
-rw-r--r--autom4te.cache/traces.0333
-rw-r--r--cgi/Android.mk31
-rw-r--r--cgi/Makefile54
-rw-r--r--cgi/cgi.c1604
-rw-r--r--cgi/cgi.h484
-rw-r--r--cgi/cgi_cstest.c114
-rw-r--r--cgi/cgiwrap.c246
-rw-r--r--cgi/cgiwrap.h168
-rw-r--r--cgi/date.c192
-rw-r--r--cgi/date.h25
-rw-r--r--cgi/fcgi_hello.c59
-rw-r--r--cgi/html.c802
-rw-r--r--cgi/html.h43
-rw-r--r--cgi/rfc2388.c610
-rw-r--r--cgi/static.c133
-rwxr-xr-xconfig.guess1317
-rwxr-xr-xconfig.sub1411
-rwxr-xr-xconfigure8320
-rw-r--r--configure.in512
-rw-r--r--contrib/cs-mode.el50
-rw-r--r--cs/Android.mk25
-rw-r--r--cs/Makefile103
-rw-r--r--cs/cs.c106
-rw-r--r--cs/cs.h486
-rw-r--r--cs/csdump.c66
-rw-r--r--cs/csparse.c4443
-rw-r--r--cs/cstest.c137
-rw-r--r--cs/test.cs82
-rw-r--r--cs/test.cs.gold212
-rw-r--r--cs/test.hdf151
-rw-r--r--cs/test10.cs22
-rw-r--r--cs/test10.cs.gold17
-rw-r--r--cs/test11.cs34
-rw-r--r--cs/test11.cs.gold73
-rw-r--r--cs/test12.cs30
-rw-r--r--cs/test12.cs.gold156
-rw-r--r--cs/test13.cs6
-rw-r--r--cs/test13.cs.gold11
-rw-r--r--cs/test14.cs130
-rw-r--r--cs/test14.cs.gold91
-rw-r--r--cs/test15.cs10
-rw-r--r--cs/test15.cs.gold11
-rw-r--r--cs/test16.cs7
-rw-r--r--cs/test16.cs.gold20
-rw-r--r--cs/test17.cs21
-rw-r--r--cs/test17.cs.gold11
-rw-r--r--cs/test18.cs35
-rw-r--r--cs/test18.cs.gold36
-rw-r--r--cs/test19.cs21
-rw-r--r--cs/test19.cs.gold40
-rw-r--r--cs/test2.cs7
-rw-r--r--cs/test2.cs.gold6
-rw-r--r--cs/test3.cs80
-rw-r--r--cs/test3.cs.gold147
-rw-r--r--cs/test4.cs126
-rw-r--r--cs/test4.cs.gold119
-rw-r--r--cs/test5.cs18
-rw-r--r--cs/test5.cs.gold17
-rw-r--r--cs/test6.cs20
-rw-r--r--cs/test6.cs.gold15
-rw-r--r--cs/test7.cs20
-rw-r--r--cs/test7.cs.gold21
-rw-r--r--cs/test8.cs10
-rw-r--r--cs/test8.cs.gold11
-rw-r--r--cs/test9.cs6
-rw-r--r--cs/test9.cs.gold5
-rw-r--r--cs/test_abs_max_min.cs28
-rw-r--r--cs/test_abs_max_min.cs.gold1239
-rw-r--r--cs/test_cgi_escape.cs68
-rw-r--r--cs/test_chuck.cs18
-rw-r--r--cs/test_chuck.cs.gold8
-rw-r--r--cs/test_comma.cs11
-rw-r--r--cs/test_comma.cs.gold12
-rw-r--r--cs/test_crc.cs3
-rw-r--r--cs/test_crc.cs.gold4
-rw-r--r--cs/test_each_array.cs5
-rw-r--r--cs/test_each_array.cs.gold12
-rw-r--r--cs/test_escape.cs67
-rw-r--r--cs/test_escape.cs.gold86
-rw-r--r--cs/test_exists.cs7
-rw-r--r--cs/test_first_last.cs29
-rw-r--r--cs/test_first_last.cs.gold130
-rw-r--r--cs/test_func.cs30
-rw-r--r--cs/test_func.cs.gold51
-rw-r--r--cs/test_iter.cs14
-rw-r--r--cs/test_iter.cs.gold181
-rw-r--r--cs/test_joo.cs206
-rw-r--r--cs/test_joo.cs.gold147
-rw-r--r--cs/test_macro_set.cs22
-rw-r--r--cs/test_macro_set.cs.gold29
-rw-r--r--cs/test_name.cs7
-rw-r--r--cs/test_name.cs.gold14
-rw-r--r--cs/test_numbers.cs56
-rw-r--r--cs/test_numbers.cs.gold39
-rw-r--r--cs/test_paren.cs5
-rw-r--r--cs/test_paren.cs.gold6
-rw-r--r--cs/test_splice.cs11
-rw-r--r--cs/test_splice.cs.gold272
-rw-r--r--cs/test_str_find.cs20
-rw-r--r--cs/test_str_find.cs.gold21
-rw-r--r--cs/test_tag.cs1
-rw-r--r--cs/test_tag.cs.gold2
-rw-r--r--cs/test_tag.hdf1
-rw-r--r--cs/test_trak1.cs9
-rw-r--r--cs/test_trak1.cs.gold8
-rw-r--r--cs/test_url_validate.cs23
-rw-r--r--cs/test_url_validate.hdf18
-rw-r--r--cs/test_uvar.cs6
-rw-r--r--cs/test_uvar.cs.gold7
-rw-r--r--cs/test_var.cs1
-rw-r--r--cs/test_var.cs.gold2
-rw-r--r--cs/test_with.cs6
-rw-r--r--cs/test_with.cs.gold31
-rw-r--r--cs_config.h238
-rw-r--r--cs_config.h.in238
-rw-r--r--csharp/CS.cs149
-rw-r--r--csharp/Makefile64
-rw-r--r--csharp/README37
-rw-r--r--csharp/csperftest.cs49
-rw-r--r--csharp/cstest.cs23
-rw-r--r--csharp/cstest.gold2
-rw-r--r--csharp/data_cstest.cst5
-rw-r--r--csharp/data_cstest.hdf1
-rw-r--r--dso/Makefile35
-rw-r--r--dso/README11
-rw-r--r--dso/dsotest.c17
-rw-r--r--imd/0.gifbin50 -> 0 bytes
-rw-r--r--imd/1.gifbin50 -> 0 bytes
-rw-r--r--imd/2.gifbin50 -> 0 bytes
-rw-r--r--imd/3.gifbin50 -> 0 bytes
-rw-r--r--imd/4.gifbin1189 -> 0 bytes
-rw-r--r--imd/5.gifbin50 -> 0 bytes
-rw-r--r--imd/6.gifbin1171 -> 0 bytes
-rw-r--r--imd/7.gifbin640 -> 0 bytes
-rw-r--r--imd/Makefile28
-rw-r--r--imd/README14
-rw-r--r--imd/example.imd22
-rw-r--r--imd/imd.c1159
-rw-r--r--imd/imd.cs205
-rwxr-xr-ximd/imdm.py209
-rw-r--r--imd/test.in2
-rwxr-xr-xinstall-sh238
-rw-r--r--java-jni/Android.mk79
-rw-r--r--java-jni/CGI.java18
-rw-r--r--java-jni/CS.java120
-rw-r--r--java-jni/CSFileLoader.java22
-rw-r--r--java-jni/CSTest.java271
-rw-r--r--java-jni/CSUtil.java62
-rw-r--r--java-jni/HDF.java389
-rw-r--r--java-jni/JNI.java80
-rw-r--r--java-jni/Makefile90
-rw-r--r--java-jni/README-bin.txt33
-rw-r--r--java-jni/README.txt40
-rw-r--r--java-jni/clearsilver.jarbin8162 -> 0 bytes
-rw-r--r--java-jni/j_neo_cgi.c43
-rw-r--r--java-jni/j_neo_cs.c180
-rw-r--r--java-jni/j_neo_util.c477
-rw-r--r--java-jni/j_neo_util.h20
-rw-r--r--java-jni/javatest.gold206
-rw-r--r--java-jni/servlet/CSPage.java123
-rw-r--r--java-jni/servlet/HelloCSServlet.java42
-rw-r--r--java-jni/testdata/test.cs7
-rw-r--r--java-jni/testdata/test1.hdf3
-rw-r--r--m4/ac_jni_include_dirs.m497
-rw-r--r--man/man3/cBroadcast.337
-rw-r--r--man/man3/cCreate.336
-rw-r--r--man/man3/cDestroy.337
-rw-r--r--man/man3/cSignal.337
-rw-r--r--man/man3/cWait.339
-rw-r--r--man/man3/cgi_cookie_authority.347
-rw-r--r--man/man3/cgi_cookie_clear.348
-rw-r--r--man/man3/cgi_cookie_set.362
-rw-r--r--man/man3/cgi_cs_init.337
-rw-r--r--man/man3/cgi_debug_init.340
-rw-r--r--man/man3/cgi_destroy.339
-rw-r--r--man/man3/cgi_display.339
-rw-r--r--man/man3/cgi_error.340
-rw-r--r--man/man3/cgi_filehandle.343
-rw-r--r--man/man3/cgi_init.352
-rw-r--r--man/man3/cgi_neo_error.339
-rw-r--r--man/man3/cgi_output.338
-rw-r--r--man/man3/cgi_parse.351
-rw-r--r--man/man3/cgi_redirect.342
-rw-r--r--man/man3/cgi_redirect_uri.343
-rw-r--r--man/man3/cgi_register_parse_cb.377
-rw-r--r--man/man3/cgi_url_escape.337
-rw-r--r--man/man3/cgi_url_escape_more.340
-rw-r--r--man/man3/cgi_url_unescape.334
-rw-r--r--man/man3/cgi_url_validate.339
-rw-r--r--man/man3/cgi_vredirect.341
-rw-r--r--man/man3/cgiwrap_getenv.343
-rw-r--r--man/man3/cgiwrap_init_emu.356
-rw-r--r--man/man3/cgiwrap_init_std.337
-rw-r--r--man/man3/cgiwrap_iterenv.340
-rw-r--r--man/man3/cgiwrap_putenv.342
-rw-r--r--man/man3/cgiwrap_read.338
-rw-r--r--man/man3/cgiwrap_write.337
-rw-r--r--man/man3/cgiwrap_writef.336
-rw-r--r--man/man3/cgiwrap_writevf.339
-rw-r--r--man/man3/cs_destroy.341
-rw-r--r--man/man3/cs_dump.341
-rw-r--r--man/man3/cs_init.348
-rw-r--r--man/man3/cs_parse_file.341
-rw-r--r--man/man3/cs_parse_string.348
-rw-r--r--man/man3/cs_register_esc_strfunc.342
-rw-r--r--man/man3/cs_register_fileload.347
-rw-r--r--man/man3/cs_register_strfunc.352
-rw-r--r--man/man3/cs_render.352
-rw-r--r--man/man3/dictCleanup.341
-rw-r--r--man/man3/dictCreate.354
-rw-r--r--man/man3/dictDestroy.336
-rw-r--r--man/man3/dictModifyValue.348
-rw-r--r--man/man3/dictNext.351
-rw-r--r--man/man3/dictReleaseLock.340
-rw-r--r--man/man3/dictRemove.338
-rw-r--r--man/man3/dictSearch.345
-rw-r--r--man/man3/dictSetValue.341
-rw-r--r--man/man3/fCreate.339
-rw-r--r--man/man3/fDestroy.337
-rw-r--r--man/man3/fFind.340
-rw-r--r--man/man3/fLock.337
-rw-r--r--man/man3/fUnlock.336
-rw-r--r--man/man3/filter_create_fd.366
-rw-r--r--man/man3/filter_create_fp.357
-rw-r--r--man/man3/filter_wait.342
-rw-r--r--man/man3/hdf_copy.340
-rw-r--r--man/man3/hdf_destroy.339
-rw-r--r--man/man3/hdf_dump.329
-rw-r--r--man/man3/hdf_dump_format.329
-rw-r--r--man/man3/hdf_dump_str.329
-rw-r--r--man/man3/hdf_get_attr.329
-rw-r--r--man/man3/hdf_get_child.337
-rw-r--r--man/man3/hdf_get_copy.344
-rw-r--r--man/man3/hdf_get_int_value.344
-rw-r--r--man/man3/hdf_get_node.340
-rw-r--r--man/man3/hdf_get_obj.337
-rw-r--r--man/man3/hdf_get_value.342
-rw-r--r--man/man3/hdf_get_valuef.343
-rw-r--r--man/man3/hdf_get_valuevf.342
-rw-r--r--man/man3/hdf_init.335
-rw-r--r--man/man3/hdf_obj_attr.329
-rw-r--r--man/man3/hdf_obj_child.338
-rw-r--r--man/man3/hdf_obj_name.336
-rw-r--r--man/man3/hdf_obj_next.334
-rw-r--r--man/man3/hdf_obj_top.339
-rw-r--r--man/man3/hdf_obj_value.337
-rw-r--r--man/man3/hdf_read_string.328
-rw-r--r--man/man3/hdf_read_string_ignore.328
-rw-r--r--man/man3/hdf_register_fileload.344
-rw-r--r--man/man3/hdf_remove_tree.329
-rw-r--r--man/man3/hdf_search_path.341
-rw-r--r--man/man3/hdf_set_attr.330
-rw-r--r--man/man3/hdf_set_buf.343
-rw-r--r--man/man3/hdf_set_copy.341
-rw-r--r--man/man3/hdf_set_int_value.340
-rw-r--r--man/man3/hdf_set_symlink.350
-rw-r--r--man/man3/hdf_set_value.346
-rw-r--r--man/man3/hdf_set_valuef.351
-rw-r--r--man/man3/hdf_sort_obj.363
-rw-r--r--man/man3/hdf_write_file.328
-rw-r--r--man/man3/hdf_write_file_atomic.333
-rw-r--r--man/man3/hdf_write_string.328
-rw-r--r--man/man3/mCreate.336
-rw-r--r--man/man3/mDestroy.336
-rw-r--r--man/man3/mLock.337
-rw-r--r--man/man3/mUnlock.336
-rw-r--r--man/man3/nerr_error_string.334
-rw-r--r--man/man3/nerr_error_traceback.333
-rw-r--r--man/man3/nerr_handle.335
-rw-r--r--man/man3/nerr_ignore.329
-rw-r--r--man/man3/nerr_init.334
-rw-r--r--man/man3/nerr_log_error.329
-rw-r--r--man/man3/nerr_match.337
-rw-r--r--man/man3/nerr_pass.335
-rw-r--r--man/man3/nerr_pass_ctx.341
-rw-r--r--man/man3/nerr_raise.339
-rw-r--r--man/man3/nerr_register.334
-rw-r--r--man/man3/skipDelete.338
-rw-r--r--man/man3/skipFreeList.337
-rw-r--r--man/man3/skipInsert.343
-rw-r--r--man/man3/skipNewList.356
-rw-r--r--man/man3/skipNext.348
-rw-r--r--man/man3/skipRelease.340
-rw-r--r--man/man3/skipSearch.345
-rw-r--r--man/man3/wdb_keys.341
-rwxr-xr-xmkinstalldirs40
-rw-r--r--mod_ecs/Makefile34
-rw-r--r--mod_ecs/Makefile.tmpl1
-rw-r--r--mod_ecs/README83
-rw-r--r--mod_ecs/mod_ecs.c832
-rw-r--r--mod_ecs/mod_ecs.h24
-rw-r--r--perl/Changes10
-rw-r--r--perl/ClearSilver.pm68
-rw-r--r--perl/ClearSilver.xs457
-rw-r--r--perl/MANIFEST11
-rw-r--r--perl/Makefile.PL18
-rw-r--r--perl/README43
-rw-r--r--perl/test.cs7
-rw-r--r--perl/test.gold11
-rw-r--r--perl/test.hdf14
-rw-r--r--perl/test.out11
-rw-r--r--perl/test.pl177
-rw-r--r--perl/typemap3
-rw-r--r--ports/freebsd/Makefile37
-rw-r--r--ports/freebsd/pkg-descr14
-rw-r--r--ports/freebsd/pkg-plist33
-rw-r--r--ports/rpm/clearsilver.spec221
-rw-r--r--python/Makefile52
-rw-r--r--python/README.txt93
-rwxr-xr-xpython/examples/base/CSPage.py224
-rw-r--r--python/examples/base/PassSGMLParser.py65
-rw-r--r--python/examples/base/SafeHtml.py145
-rw-r--r--python/examples/base/__init__.py0
-rw-r--r--python/examples/base/handle_error.py103
-rwxr-xr-xpython/examples/base/hdfhelp.py262
-rwxr-xr-xpython/examples/base/log.py130
-rwxr-xr-xpython/examples/base/odb.py1492
-rwxr-xr-xpython/examples/base/odb_mysql.py72
-rwxr-xr-xpython/examples/base/odb_sqlite.py171
-rwxr-xr-xpython/examples/base/odb_test.py296
-rw-r--r--python/examples/base/profiler.py73
-rw-r--r--python/examples/base/sgmllib.py615
-rw-r--r--python/examples/base/who_calls.py141
-rwxr-xr-xpython/examples/base/wordwrap.py50
-rw-r--r--python/examples/trans/README118
-rw-r--r--python/examples/trans/TODO22
-rw-r--r--python/examples/trans/db_trans.py82
-rw-r--r--python/examples/trans/testroot/tmpl/test1.cs8
-rw-r--r--python/examples/trans/testroot/tmpl/test1.hdf5
-rwxr-xr-xpython/examples/trans/trans.py594
-rw-r--r--python/examples/trans/trans.sql26
-rw-r--r--python/examples/trans/tstart.py13
-rw-r--r--python/neo_cgi.c951
-rw-r--r--python/neo_cgi.def5
-rw-r--r--python/neo_cs.c187
-rw-r--r--python/neo_util.c708
-rw-r--r--python/p_neo_util.h91
-rw-r--r--python/setup.py131
-rwxr-xr-xpython/static.py50
-rwxr-xr-xpython/upload.py41
-rw-r--r--ruby/Makefile51
-rw-r--r--ruby/ext/hdf/MANIFEST4
-rw-r--r--ruby/ext/hdf/extconf.rb12
-rw-r--r--ruby/ext/hdf/neo_cs.c122
-rw-r--r--ruby/ext/hdf/neo_ruby.h11
-rw-r--r--ruby/ext/hdf/neo_util.c630
-rw-r--r--ruby/hdftest.gold27
-rw-r--r--ruby/install.rb1015
-rw-r--r--ruby/lib/neo.rb46
-rw-r--r--ruby/test/hdftest.rb39
-rw-r--r--rules.mk.in169
-rwxr-xr-xscripts/ChangeLog.py245
-rwxr-xr-xscripts/commitlog.py86
-rwxr-xr-xscripts/cs_lint.py283
-rwxr-xr-xscripts/document.py294
-rw-r--r--util/Android.mk31
-rw-r--r--util/Makefile33
-rw-r--r--util/dict.c610
-rw-r--r--util/dict.h164
-rw-r--r--util/filter.c221
-rw-r--r--util/filter.h92
-rw-r--r--util/missing.c91
-rw-r--r--util/neo_date.c109
-rw-r--r--util/neo_date.h30
-rw-r--r--util/neo_err.c472
-rw-r--r--util/neo_err.h226
-rw-r--r--util/neo_files.c256
-rw-r--r--util/neo_files.h37
-rw-r--r--util/neo_hash.c293
-rw-r--r--util/neo_hash.h57
-rw-r--r--util/neo_hdf.c1867
-rw-r--r--util/neo_hdf.h587
-rw-r--r--util/neo_misc.c228
-rw-r--r--util/neo_misc.h134
-rw-r--r--util/neo_net.c676
-rw-r--r--util/neo_net.h57
-rw-r--r--util/neo_rand.c114
-rw-r--r--util/neo_rand.h24
-rw-r--r--util/neo_server.c229
-rw-r--r--util/neo_server.h48
-rw-r--r--util/neo_str.c892
-rw-r--r--util/neo_str.h114
-rw-r--r--util/osdep.h44
-rw-r--r--util/rcfs.c262
-rw-r--r--util/rcfs.h34
-rw-r--r--util/regex/regex.c5520
-rw-r--r--util/regex/regex.h495
-rw-r--r--util/skiplist.c632
-rw-r--r--util/skiplist.h165
-rw-r--r--util/snprintf.c832
-rw-r--r--util/test/Makefile93
-rw-r--r--util/test/date_test.c45
-rw-r--r--util/test/hash_test.c118
-rw-r--r--util/test/hdf_copy_test.c50
-rw-r--r--util/test/hdf_copy_test.hdf50
-rw-r--r--util/test/hdf_dealloc_test.c28
-rw-r--r--util/test/hdf_hash_test.c42
-rw-r--r--util/test/hdf_sort_test.c70
-rw-r--r--util/test/hdfloadtest.c95
-rw-r--r--util/test/hdftest.c147
-rw-r--r--util/test/listdir_test.c54
-rw-r--r--util/test/net_test.c185
-rw-r--r--util/test/test.hdf23
-rw-r--r--util/test/test2.hdf7
-rw-r--r--util/test/ulist_test.c62
-rw-r--r--util/ulist.c286
-rw-r--r--util/ulist.h45
-rw-r--r--util/ulocks.c204
-rw-r--r--util/ulocks.h191
-rw-r--r--util/wdb.c1596
-rw-r--r--util/wdb.h115
-rw-r--r--util/wildmat.c207
-rw-r--r--util/wildmat.h16
426 files changed, 0 insertions, 77754 deletions
diff --git a/Android.mk b/Android.mk
deleted file mode 100644
index 5053e7d..0000000
--- a/Android.mk
+++ /dev/null
@@ -1 +0,0 @@
-include $(call all-subdir-makefiles)
diff --git a/CS_LICENSE b/CS_LICENSE
deleted file mode 100644
index 186c973..0000000
--- a/CS_LICENSE
+++ /dev/null
@@ -1,61 +0,0 @@
-
-ClearSilver is available under the following license, derived
-from the Apache Software License v1.1
-
-For alternative licensing, please contact the authors at
-blong@clearsilver.net
-
-ClearSilver Software License
-
-Version 1.0
-
-Copyright (c) 2003 Brandon Long. 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.
-
-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 end-user documentation included with the redistribution, if any,
-must include the following acknowledgment:
-
- "This product includes software developed by
- Neotonic Software Corp. (http://www.neotonic.com/)."
-
-Alternately, this acknowledgment may appear in the software itself, if
-and wherever such third-party acknowledgments normally appear.
-
-4. The names "Neotonic" and "ClearSilver" must not be used
-to endorse or promote products derived from this software without prior
-written permission. For written permission, please contact
-clearsilver@neotonic.com.
-
-5. Products derived from this software may not be called "ClearSilver", nor
-may "ClearSilver" appear in their name, without prior written permission of
-Brandon Long or Neotonic Software Corp.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED 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 NEOTONIC, INC., OR ITS CLEARSILVER CONTRIBUTORS 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.
-
-This software consists of voluntary contributions made by many
-individuals on behalf of Brandon Long and Neotonic Software Corp. For
-more information on Neotonic, please see <http://www.neotonic.com/>.
-
-Some of the concepts of this software are based on previous software
-developed by Scott Shambarger, Paul Clegg, and John Cwikla. The current
-authors wish to thank them for their efforts.
diff --git a/ClearSilver.h b/ClearSilver.h
deleted file mode 100644
index 9247245..0000000
--- a/ClearSilver.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#ifndef __CLEARSILVER_H_
-#define __CLEARSILVER_H_ 1
-
-#include "cs_config.h"
-
-/* If you need these backward compatible definitions, define CS_COMPAT */
-/* These changed after v0.9.1 */
-#define CS_COMPAT 0
-
-#if defined(CS_COMPAT) || !defined(HASH)
-#define HASH NE_HASH
-#define HASHNODE NE_HASHNODE
-#define hash_init ne_hash_init
-#define hash_destroy ne_hash_destroy
-#define hash_lookup ne_hash_lookup
-#define hash_has_key ne_hash_has_key
-#define hash_remove ne_hash_remove
-#define hash_next ne_hash_next
-#define hash_str_comp ne_hash_str_comp
-#define hash_str_hash ne_hash_str_hash
-#endif /* CS_COMPAT */
-
-#include <stdlib.h>
-#include <sys/stat.h>
-
-/* Base libraries */
-#include "util/neo_misc.h"
-#include "util/neo_err.h"
-#include "util/neo_date.h"
-#include "util/neo_files.h"
-#include "util/neo_hash.h"
-#include "util/neo_hdf.h"
-#include "util/neo_rand.h"
-#include "util/neo_net.h"
-#include "util/neo_server.h"
-#include "util/neo_str.h"
-#include "util/ulist.h"
-#include "util/wildmat.h"
-#include "util/filter.h"
-
-#ifdef HAVE_LOCKF
-# include "util/ulocks.h"
-# include "util/rcfs.h"
-
-/* These are dependent on the pthread locking code in ulocks */
-# ifdef HAVE_PTHREADS
-# include "util/skiplist.h"
-# include "util/dict.h"
-# endif
-#endif
-
-/* This is dependent on Berkeley DB v2 */
-#ifdef HAVE_DB2
-# include "util/wdb.h"
-#endif
-
-/* The ClearSilver Template language */
-#include "cs/cs.h"
-
-/* The ClearSilver CGI connector */
-#include "cgi/cgi.h"
-#include "cgi/cgiwrap.h"
-#include "cgi/date.h"
-#include "cgi/html.h"
-
-#endif /* __CLEARSILVER_H_ */
diff --git a/INSTALL b/INSTALL
deleted file mode 100644
index d8775ad..0000000
--- a/INSTALL
+++ /dev/null
@@ -1,124 +0,0 @@
-********************************************
-*
-* Clearsilver INSTALL
-*
-* http://www.clearsilver.net
-*
-* Brandon Long, David Jeske
-*
-********************************************
-
-1) Compile ------------------------------------------------
-
-Simplest case:
-
-# ./configure
-# make
-
-Options to configure:
- --disable-compression Disables HTML Compression support
- --enable-remote-debugger Enables remote X CGI debugging
- --disable-apache Disables building of apache 1.3.x module
- --with-apache=path Set location of Apache installation
- --disable-python Disables building of python module
- --with-python=path Set location of Python Includes
- --disable-perl Disables building of perl module
- --with-perl=path Set location of Perl binary
- --disable-ruby Disables building of ruby module
- --with-ruby=path Set location of Ruby binary
- --disable-java Disables building of java module
- --with-java=path Set location of J2SDK
- --disable-csharp Disables building of csharp module
- --with-csharp=path Set location of csharp
- --enable-gettext Enable gettext message translation
-
---disable-compression: Currently, the CGI output code in the cgi
-kit automatically attempts to detect whether the remote browser can
-handle compressed data, and if it does, compresses the output for
-text/html. This is run-time configurable via Config.CompressionEnabled.
-Disabling it at compile time eliminates the dependency on libz.
-
---enable-remote-debugger: The CGI kit contains code for remotely
-debuggin CGI programs by launching an X based debugger (such as xxgdb or
-ddd) at the X display you specify in the HTTP request. There are
-controls such as a configurable list of allowed displays, but remote
-debugging is disabled by default.
-
---enable-gettext: Enables gettext message translation. Once enabled
-you have a new builtin function "_(<message>)". This function calls the
-function gettext (man 3 gettext).
-
-The rest of the --disable/--with either disable a specific module, or
-point ClearSilver at the right program to enable it. The configure
-script will simple not build any module it can't find the right versions
-of programs to build against. Alternatively, if you are making
-ClearSilver part of your build environment, you can simple delete
-whichever module directory you don't want, and the build will ignore it.
-
-For information about compiling on Windows under MingW and MSYS, see
-python/README.txt
-
-The csharp wrapper was built with Mono (www.go-mono.com) and should work
-with v0.24 and later (give or take). In theory, it should be fairly
-simple to get this working on MS.Net as well.
-
-2) Install ------------------------------------------------
-
-# make install
-
-The make install is relatively new, and just installs the
-libraries/header files (and probably the perl and python modules, but
-that's a guess)
-
-3) Example 1, Apache static.cgi ----------------------------------
-
-"static.cgi" is a simple binary which will allow you to write static
-HDF files, static ClearSilver templates, and render them. This is a
-good way to get started and learn the clearsilver model and
-syntax. Follow the steps below to install static.cgi into your Apache
-configuration and then read the documentation while playing with
-static files.
-
- http://www.clearsilver.net/docs/man_hdf.hdf
-
-Add the following to your Apache configuration and copy the
-Clearsilver static.cgi binary from cgi/static.cgi into your Apache
-cgi-bin directory.
-
- AddHandler cgi-script .cgi
- Action cs-handler /cgi-bin/static.cgi
- AddHandler cs-handler .cs
-
-Since any html file is a valid CS file, I also run with:
-
- AddHandler cs-handler .html
-
-* About static.cgi:
-
-static.cgi works by assuming that whatever file it was pointed at is a
-CS template. It first tries to load common.hdf in the same directory,
-then it tries to load some other hdf files, and then it parses and
-displays the template file.
-
-Ie, if its pointed at foo.cs, it will load common.hdf, try to load
-foo.cs.hdf, if that fails, it tries foo.hdf. If the hdf defines
-CGI.StaticContent, it will assume that's the real template file (which
-is how we use it on www.clearsilver.net, we just point at he .hdf files,
-which define StaticContent as a wrapper.cs, which includes another file
-defined in the .hdf file).
-
-4) Example 2, imd image server ------------------------------------
-
-"imd" is a simple image server written with C and clearsilver. The imd
-directory has a README on how to set up imd with Apache.
-
-5) Example 3, using with Python -----------------------------------
-
-The clearsilver python wrapper comes with CSPage.py. This file
-contains the CSPage superclass, and this file gives some pointers on
-how to use the cs handler via python. A much more thorough example
-is Scott Hassan's image_server, available from
-
- http://www.dotfunk.com/projects/image_server
-
-
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 8fd5348..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-
-This source tree contains source code from Neotonic.
-All files in this release are marked with their license
-terms. Files which are part of our public open-source
-toolkits are released under our Neotonic ClearSilver License.
-A few files are from other sources, and will include their respective
-copyrights and licenses.
-
-If you did not receive a copy of the Neotonic ClearSilver License with
-this kit, you can get one from:
-
- http://www.clearsilver.net/license.hdf
-
-Some source-kits received from Neotonic may contain
-licensed Neotonic source code. That source code is
-Copyright (C) Neotonic, and may not be used without
-express written permission of Neotonic.
-
-
-
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 267d1b2..0000000
--- a/Makefile
+++ /dev/null
@@ -1,131 +0,0 @@
-#
-# Neotonic Source Kit
-#
-# Copyright (C) 2001 Neotonic and Brandon Long
-#
-#
-
-NEOTONIC_ROOT = .
-
-include rules.mk
-
-SUBDIRS = util cs cgi $(BUILD_WRAPPERS)
-
-OUTDIRS = bin libs
-
-# These are blank here... but populated under automated build
-VERSION =
-RELEASE =
-
-all: cs $(BUILD_WRAPPERS)
-
-rules.mk: configure
- ./configure
-
-configure: configure.in
- ./autogen.sh
-
-cs: output_dir
- @for mdir in $(SUBDIRS); do \
- if test -d $$mdir; then \
- if test -f $$mdir/Makefile.PL -a ! -f $$mdir/Makefile; then \
- cd $$mdir; $(PERL) Makefile.PL PREFIX=$(prefix); cd ..; \
- fi; \
- $(MAKE) -C $$mdir PREFIX=$(prefix); \
- fi; \
- done
-
-install: all
- ./mkinstalldirs $(DESTDIR)$(cs_includedir)
- ./mkinstalldirs $(DESTDIR)$(bindir)
- ./mkinstalldirs $(DESTDIR)$(libdir)
- ./mkinstalldirs $(DESTDIR)$(mandir)/man3
- $(INSTALL) -m 644 ClearSilver.h $(DESTDIR)$(cs_includedir)/
- $(INSTALL) -m 644 cs_config.h $(DESTDIR)$(cs_includedir)/
- $(INSTALL) -m 644 man/man3/*.3 $(DESTDIR)$(mandir)/man3/
- @for mdir in $(SUBDIRS); do \
- if test -d $$mdir; then \
- if test -f $$mdir/Makefile.PL -a ! -f $$mdir/Makefile; then \
- cd $$mdir; $(PERL) Makefile.PL PREFIX=$(prefix); cd ..; \
- fi; \
- $(MAKE) -C $$mdir PREFIX=$(prefix) install; \
- fi; \
- done
-
-depend:
- @for mdir in $(SUBDIRS); do \
- if test ! -f $$mdir/Makefile.PL; then \
- $(MAKE) -C $$mdir depend; \
- fi; \
- done
-
-newdepend: killdepend
- @echo "*******************************************"
- @echo "** Building dependencies..."
- @for mdir in $(SUBDIRS); \
- do $(MAKE) -C $$mdir depend; \
- done
-
-killdepend:
- @echo "*******************************************"
- @echo "** Removing Old dependencies..."
- @find . -name "Makefile.depends" -print | $(XARGS) rm %
-
-.PHONY: man
-man:
- @mkdir -p man/man3
- @for mdir in $(SUBDIRS); do \
- scripts/document.py --owner "ClearSilver" --outdir man/man3/ $$mdir/*.h; \
- done
-
-.PHONY: hdf
-hdf:
- @mkdir -p docs/hdf
- @for mdir in $(SUBDIRS); do \
- scripts/document.py --hdf --owner "ClearSilver" --outdir docs/hdf/ $$mdir/*.h; \
- done
-
-changelog:
- p4 changes -l ./...
-
-
-clean:
- -@for mdir in $(SUBDIRS); do \
- $(MAKE) -C $$mdir clean; \
- done
-
-distclean:
- -@for mdir in $(SUBDIRS); do \
- $(MAKE) -C $$mdir distclean; \
- done
- -@for mdir in $(OUTDIRS); do \
- rm -rf $$mdir/*; \
- done
- rm -f config.cache config.log config.status rules.mk cs_config.h
- rm -rf autom4te.cache
-
-output_dir:
- @for mdir in $(OUTDIRS); do \
- mkdir -p $$mdir; \
- done
-
-CS_DISTDIR = clearsilver-0.10.5
-CS_LABEL = CLEARSILVER-0_10_5
-CS_FILES = README README.python INSTALL LICENSE CS_LICENSE rules.mk.in Makefile acconfig.h autogen.sh config.guess config.sub configure.in cs_config.h.in mkinstalldirs install-sh ClearSilver.h
-CS_DIRS = util cs cgi python scripts mod_ecs imd java-jni perl ruby dso csharp ports contrib m4
-
-cs_dist:
- @if p4 labels Makefile | grep "${CS_LABEL}"; then \
- echo "release ${CS_LABEL} already exists"; \
- echo " to rebuild, type: p4 label -d ${CS_LABEL}"; \
- exit 1; \
- fi;
- rm -rf $(CS_DISTDIR)
- p4 label $(CS_LABEL)
- p4 labelsync -l$(CS_LABEL) $(CS_FILES) $(addsuffix /..., $(CS_DIRS))
- mkdir -p $(CS_DISTDIR)
- tar -cf - `p4 files $(CS_FILES) $(addsuffix /..., $(CS_DIRS)) | cut -d'#' -f 1 | sed -e "s|//depot/google3/third_party/clearsilver/core/||"` | (cd $(CS_DISTDIR); tar -xf -)
- $(MAKE) -C $(CS_DISTDIR) man distclean
- chmod -R u+w $(CS_DISTDIR)
- chmod -R a+r $(CS_DISTDIR)
- tar chozf $(CS_DISTDIR).tar.gz $(CS_DISTDIR)
diff --git a/README b/README
deleted file mode 100644
index 6eb4b36..0000000
--- a/README
+++ /dev/null
@@ -1,66 +0,0 @@
-************************************
-* Clearsilver README
-************************************
-
-For more information, see the website:
-
- http://www.clearsilver.net/
-
-This package includes Clearsilver, the CGI kit and HTML templating
-system. For information about building and installing, see the
-included INSTALL file. This package also includes tools which
-help you use Clearsilver, as well as a few examples.
-
-************************************************************
-*** Clearsilver
-
-* Clearsilver - This is our html template system and cgi kit.
-
-There are too many great things about clearsilver to list them all
-here, but here are some of the salient points:
-
- * get the html out of your code
- * loops, conditionals, macros, and stuff
- * cgi kit unifies query variable and cookie handling
- * super-easy to go from static mockup to dynamic page
- * run multiple front-ends on the same application code
- * super-fast C-library
- * unifies Query variable and cookie handling
- * language neutral (C,C++,Python,Ruby,Perl,Java,C#)
- * nice iterative page debugging/development features
- * generate static-data-driven page content without using any code
- * did I mention super-fast?
-
-Supported language information:
-
- README.python
-
-*************************************************************
-*** Tools
-
-* trans.py
-
-This is our transparent translation system. It's based on how we did
-translation at Yahoo!. You leave all the english strings right in the
-clearsilver templates. trans parses the html and extracts your
-language strings into a translation database. You can then translate
-the strings using any means. (it includes tools for dump and loading
-per-language files for shipping to translators). Occasionally trans
-isn't smart enough to find your language strings, in this case you can
-manually extract them into static language string files and trans will
-automatically pick them up. When it comes time to ship, trans
-generates language-independent templates, and a set of language files
-from your database.
-
-*************************************************************
-*** Examples
-
-* static.cgi
-
-This is a standalone binary which handles Clearsilver rendering of
-static content. This is a great way to play with clearsilver syntax
-before you start writing dynamic CGIs with it. This is also a great
-way to do webpage mockups with much more power than server side
-includes. See the INSTALL file for information about configuring
-this for use with apache.
-
diff --git a/README.python b/README.python
deleted file mode 100644
index 331d10c..0000000
--- a/README.python
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
-************************************************************
-*** Python Environment Information
-
-* Python - we know it and love it
-* Apache - the defacto standard
-
-* PyApache/mod_python
-
-Either one is fine, the goal is to load all Python code once, before
-Apache forks. Then, for every web-request, Apache just makes a
-function call into the Python environment which serves the page. This
-is "really fast" as it gets rid of all of the parsing and loading of
-Python. Various versions of PyApache and mod_python have gained and
-lost and gained again the ability to do this well. We used a hacked
-version of PyApache way back when, I think mod_python does this out of
-the box today.
-
-
-
-************************************************************
-*** Python Tools
-
-* CSPage.py
-
-This is our "page rendering superclass". It's pretty simple and has
-nice machinery for some of the stuff talked about on this list. For
-example, it has nice debugging and redirect support, and it has a
-mechanism for mapping form submit buttons to method names. Here is an
-example of how the form stuff works:
-
- <form action="foo.py">
- <input type=submit name="Action.Foo" value="Do Foo!">
- </form>
-
- class MyPage(CSPage):
- def setup(self):
- # this runs before everything else
- pass
- def display(self):
- # this is a regular non-submission render
- pass
- def Action_Foo(self):
- # this is run automatically when the Foo submit button is clicked
- pass
-
-* odb.py
-
-This is an object to relational database mapping tool. It makes
-interacting with SQL databases really easy. It gives you a place to
-put all your SQL code. It also could be changed to work with flat
-files as well. We have some nice hooks to connect this to Clearsilver,
-so rendering database data into webpages is really easy. Here is an
-example:
-
-rows = mydb.mytable.fetchAllRows() # fetch all rows
-rows.hdfExport("CGI.tabledata",ncgi.hdf) # export them into the dataset
-
-# it is also really easy to change rows:
-
-row = mydb.mytable.fetchRow( ('user', 'jeske') )
-row.email = 'jeske at chat.net'
-row.save()
-
diff --git a/acconfig.h b/acconfig.h
deleted file mode 100644
index da0f976..0000000
--- a/acconfig.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-/*
- * config file
- */
-
-#ifndef __CS_CONFIG_H_
-#define __CS_CONFIG_H_ 1
-
-@TOP@
-
-/* Enable support for HTML Compression (still must be enabled at run time) */
-#undef HTML_COMPRESSION
-
-/* Enable support for X Remote CGI Debugging */
-#undef ENABLE_REMOTE_DEBUG
-
-/********* SYSTEM CONFIG ***************************************************/
-/* autoconf/configure should figure all of these out for you */
-
-/* Does your system have the snprintf() call? */
-#undef HAVE_SNPRINTF
-
-/* Does your system have the vsnprintf() call? */
-#undef HAVE_VSNPRINTF
-
-/* Does your system have the strtok_r() call? */
-#undef HAVE_STRTOK_R
-
-/* Does your system have the localtime_r() call? */
-#undef HAVE_LOCALTIME_R
-
-/* Does your system have the gmtime_r() call? */
-#undef HAVE_GMTIME_R
-
-/* Does your system have the mkstemp() call? */
-#undef HAVE_MKSTEMP
-
-/* Does your system have regex.h */
-#undef HAVE_REGEX
-
-/* Does your system have pthreads? */
-#undef HAVE_PTHREADS
-
-/* Does your system have lockf ? */
-#undef HAVE_LOCKF
-
-/* Does your system have Berkeley DB v2 ? */
-#undef HAVE_DB2
-
-/* Enable support for gettext message translation */
-#undef ENABLE_GETTEXT
-
-@BOTTOM@
-
-#endif /* __CS_CONFIG_H_ */
diff --git a/aclocal.m4 b/aclocal.m4
deleted file mode 100644
index 85d7f73..0000000
--- a/aclocal.m4
+++ /dev/null
@@ -1,929 +0,0 @@
-dnl aclocal.m4 generated automatically by aclocal 1.4-p6
-
-dnl Copyright (C) 1994, 1995-8, 1999, 2001 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.
-
-# lib-prefix.m4 serial 4 (gettext-0.14.2)
-dnl Copyright (C) 2001-2005 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 From Bruno Haible.
-
-dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
-dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
-dnl require excessive bracketing.
-ifdef([AC_HELP_STRING],
-[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
-[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
-
-dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
-dnl to access previously installed libraries. The basic assumption is that
-dnl a user will want packages to use other packages he previously installed
-dnl with the same --prefix option.
-dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
-dnl libraries, but is otherwise very convenient.
-AC_DEFUN([AC_LIB_PREFIX],
-[
- AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
- AC_REQUIRE([AC_PROG_CC])
- AC_REQUIRE([AC_CANONICAL_HOST])
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- dnl By default, look in $includedir and $libdir.
- use_additional=yes
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- AC_LIB_ARG_WITH([lib-prefix],
-[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
- --without-lib-prefix don't search for libraries in includedir and libdir],
-[
- if test "X$withval" = "Xno"; then
- use_additional=no
- else
- if test "X$withval" = "X"; then
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- else
- additional_includedir="$withval/include"
- additional_libdir="$withval/lib"
- fi
- fi
-])
- if test $use_additional = yes; then
- dnl Potentially add $additional_includedir to $CPPFLAGS.
- dnl But don't add it
- dnl 1. if it's the standard /usr/include,
- dnl 2. if it's already present in $CPPFLAGS,
- dnl 3. if it's /usr/local/include and we are using GCC on Linux,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_includedir" != "X/usr/include"; then
- haveit=
- for x in $CPPFLAGS; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-I$additional_includedir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test "X$additional_includedir" = "X/usr/local/include"; then
- if test -n "$GCC"; then
- case $host_os in
- linux* | gnu* | k*bsd*-gnu) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- if test -d "$additional_includedir"; then
- dnl Really add $additional_includedir to $CPPFLAGS.
- CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
- fi
- fi
- fi
- fi
- dnl Potentially add $additional_libdir to $LDFLAGS.
- dnl But don't add it
- dnl 1. if it's the standard /usr/lib,
- dnl 2. if it's already present in $LDFLAGS,
- dnl 3. if it's /usr/local/lib and we are using GCC on Linux,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_libdir" != "X/usr/lib"; then
- haveit=
- for x in $LDFLAGS; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$additional_libdir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test "X$additional_libdir" = "X/usr/local/lib"; then
- if test -n "$GCC"; then
- case $host_os in
- linux*) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- if test -d "$additional_libdir"; then
- dnl Really add $additional_libdir to $LDFLAGS.
- LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
- fi
- fi
- fi
- fi
- fi
-])
-
-dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
-dnl acl_final_exec_prefix, containing the values to which $prefix and
-dnl $exec_prefix will expand at the end of the configure script.
-AC_DEFUN([AC_LIB_PREPARE_PREFIX],
-[
- dnl Unfortunately, prefix and exec_prefix get only finally determined
- dnl at the end of configure.
- if test "X$prefix" = "XNONE"; then
- acl_final_prefix="$ac_default_prefix"
- else
- acl_final_prefix="$prefix"
- fi
- if test "X$exec_prefix" = "XNONE"; then
- acl_final_exec_prefix='${prefix}'
- else
- acl_final_exec_prefix="$exec_prefix"
- fi
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
- prefix="$acl_save_prefix"
-])
-
-dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
-dnl variables prefix and exec_prefix bound to the values they will have
-dnl at the end of the configure script.
-AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
-[
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- acl_save_exec_prefix="$exec_prefix"
- exec_prefix="$acl_final_exec_prefix"
- $1
- exec_prefix="$acl_save_exec_prefix"
- prefix="$acl_save_prefix"
-])
-
-# lib-link.m4 serial 6 (gettext-0.14.3)
-dnl Copyright (C) 2001-2005 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 From Bruno Haible.
-
-AC_PREREQ(2.50)
-
-dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
-dnl the libraries corresponding to explicit and implicit dependencies.
-dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
-dnl augments the CPPFLAGS variable.
-AC_DEFUN([AC_LIB_LINKFLAGS],
-[
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
- define([Name],[translit([$1],[./-], [___])])
- define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
- AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
- AC_LIB_LINKFLAGS_BODY([$1], [$2])
- ac_cv_lib[]Name[]_libs="$LIB[]NAME"
- ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
- ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
- ])
- LIB[]NAME="$ac_cv_lib[]Name[]_libs"
- LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
- INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
- AC_SUBST([LIB]NAME)
- AC_SUBST([LTLIB]NAME)
- dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
- dnl results of this search when this library appears as a dependency.
- HAVE_LIB[]NAME=yes
- undefine([Name])
- undefine([NAME])
-])
-
-dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
-dnl searches for libname and the libraries corresponding to explicit and
-dnl implicit dependencies, together with the specified include files and
-dnl the ability to compile and link the specified testcode. If found, it
-dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
-dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
-dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
-dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
-AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
-[
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
- define([Name],[translit([$1],[./-], [___])])
- define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
-
- dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
- dnl accordingly.
- AC_LIB_LINKFLAGS_BODY([$1], [$2])
-
- dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
- dnl because if the user has installed lib[]Name and not disabled its use
- dnl via --without-lib[]Name-prefix, he wants to use it.
- ac_save_CPPFLAGS="$CPPFLAGS"
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
-
- AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
- ac_save_LIBS="$LIBS"
- LIBS="$LIBS $LIB[]NAME"
- AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
- LIBS="$ac_save_LIBS"
- ])
- if test "$ac_cv_lib[]Name" = yes; then
- HAVE_LIB[]NAME=yes
- AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
- AC_MSG_CHECKING([how to link with lib[]$1])
- AC_MSG_RESULT([$LIB[]NAME])
- else
- HAVE_LIB[]NAME=no
- dnl If $LIB[]NAME didn't lead to a usable library, we don't need
- dnl $INC[]NAME either.
- CPPFLAGS="$ac_save_CPPFLAGS"
- LIB[]NAME=
- LTLIB[]NAME=
- fi
- AC_SUBST([HAVE_LIB]NAME)
- AC_SUBST([LIB]NAME)
- AC_SUBST([LTLIB]NAME)
- undefine([Name])
- undefine([NAME])
-])
-
-dnl Determine the platform dependent parameters needed to use rpath:
-dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
-dnl hardcode_direct, hardcode_minus_L.
-AC_DEFUN([AC_LIB_RPATH],
-[
- dnl Tell automake >= 1.10 to complain if config.rpath is missing.
- m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
- AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
- AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
- AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
- AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
- AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
- CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
- ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
- . ./conftest.sh
- rm -f ./conftest.sh
- acl_cv_rpath=done
- ])
- wl="$acl_cv_wl"
- libext="$acl_cv_libext"
- shlibext="$acl_cv_shlibext"
- hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
- hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
- hardcode_direct="$acl_cv_hardcode_direct"
- hardcode_minus_L="$acl_cv_hardcode_minus_L"
- dnl Determine whether the user wants rpath handling at all.
- AC_ARG_ENABLE(rpath,
- [ --disable-rpath do not hardcode runtime library paths],
- :, enable_rpath=yes)
-])
-
-dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
-dnl the libraries corresponding to explicit and implicit dependencies.
-dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
-AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
-[
- define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
- dnl By default, look in $includedir and $libdir.
- use_additional=yes
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- AC_LIB_ARG_WITH([lib$1-prefix],
-[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib
- --without-lib$1-prefix don't search for lib$1 in includedir and libdir],
-[
- if test "X$withval" = "Xno"; then
- use_additional=no
- else
- if test "X$withval" = "X"; then
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- else
- additional_includedir="$withval/include"
- additional_libdir="$withval/lib"
- fi
- fi
-])
- dnl Search the library and its dependencies in $additional_libdir and
- dnl $LDFLAGS. Using breadth-first-seach.
- LIB[]NAME=
- LTLIB[]NAME=
- INC[]NAME=
- rpathdirs=
- ltrpathdirs=
- names_already_handled=
- names_next_round='$1 $2'
- while test -n "$names_next_round"; do
- names_this_round="$names_next_round"
- names_next_round=
- for name in $names_this_round; do
- already_handled=
- for n in $names_already_handled; do
- if test "$n" = "$name"; then
- already_handled=yes
- break
- fi
- done
- if test -z "$already_handled"; then
- names_already_handled="$names_already_handled $name"
- dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
- dnl or AC_LIB_HAVE_LINKFLAGS call.
- uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
- eval value=\"\$HAVE_LIB$uppername\"
- if test -n "$value"; then
- if test "$value" = yes; then
- eval value=\"\$LIB$uppername\"
- test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
- eval value=\"\$LTLIB$uppername\"
- test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
- else
- dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
- dnl that this library doesn't exist. So just drop it.
- :
- fi
- else
- dnl Search the library lib$name in $additional_libdir and $LDFLAGS
- dnl and the already constructed $LIBNAME/$LTLIBNAME.
- found_dir=
- found_la=
- found_so=
- found_a=
- if test $use_additional = yes; then
- if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
- found_dir="$additional_libdir"
- found_so="$additional_libdir/lib$name.$shlibext"
- if test -f "$additional_libdir/lib$name.la"; then
- found_la="$additional_libdir/lib$name.la"
- fi
- else
- if test -f "$additional_libdir/lib$name.$libext"; then
- found_dir="$additional_libdir"
- found_a="$additional_libdir/lib$name.$libext"
- if test -f "$additional_libdir/lib$name.la"; then
- found_la="$additional_libdir/lib$name.la"
- fi
- fi
- fi
- fi
- if test "X$found_dir" = "X"; then
- for x in $LDFLAGS $LTLIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- case "$x" in
- -L*)
- dir=`echo "X$x" | sed -e 's/^X-L//'`
- if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
- found_dir="$dir"
- found_so="$dir/lib$name.$shlibext"
- if test -f "$dir/lib$name.la"; then
- found_la="$dir/lib$name.la"
- fi
- else
- if test -f "$dir/lib$name.$libext"; then
- found_dir="$dir"
- found_a="$dir/lib$name.$libext"
- if test -f "$dir/lib$name.la"; then
- found_la="$dir/lib$name.la"
- fi
- fi
- fi
- ;;
- esac
- if test "X$found_dir" != "X"; then
- break
- fi
- done
- fi
- if test "X$found_dir" != "X"; then
- dnl Found the library.
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
- if test "X$found_so" != "X"; then
- dnl Linking with a shared library. We attempt to hardcode its
- dnl directory into the executable's runpath, unless it's the
- dnl standard /usr/lib.
- if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
- dnl No hardcoding is needed.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- else
- dnl Use an explicit option to hardcode DIR into the resulting
- dnl binary.
- dnl Potentially add DIR to ltrpathdirs.
- dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
- haveit=
- for x in $ltrpathdirs; do
- if test "X$x" = "X$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- ltrpathdirs="$ltrpathdirs $found_dir"
- fi
- dnl The hardcoding into $LIBNAME is system dependent.
- if test "$hardcode_direct" = yes; then
- dnl Using DIR/libNAME.so during linking hardcodes DIR into the
- dnl resulting binary.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- else
- if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
- dnl Use an explicit option to hardcode DIR into the resulting
- dnl binary.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- dnl Potentially add DIR to rpathdirs.
- dnl The rpathdirs will be appended to $LIBNAME at the end.
- haveit=
- for x in $rpathdirs; do
- if test "X$x" = "X$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- rpathdirs="$rpathdirs $found_dir"
- fi
- else
- dnl Rely on "-L$found_dir".
- dnl But don't add it if it's already contained in the LDFLAGS
- dnl or the already constructed $LIBNAME
- haveit=
- for x in $LDFLAGS $LIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
- fi
- if test "$hardcode_minus_L" != no; then
- dnl FIXME: Not sure whether we should use
- dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
- dnl here.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- else
- dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
- dnl here, because this doesn't fit in flags passed to the
- dnl compiler. So give up. No hardcoding. This affects only
- dnl very old systems.
- dnl FIXME: Not sure whether we should use
- dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
- dnl here.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
- fi
- fi
- fi
- fi
- else
- if test "X$found_a" != "X"; then
- dnl Linking with a static library.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
- else
- dnl We shouldn't come here, but anyway it's good to have a
- dnl fallback.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
- fi
- fi
- dnl Assume the include files are nearby.
- additional_includedir=
- case "$found_dir" in
- */lib | */lib/)
- basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
- additional_includedir="$basedir/include"
- ;;
- esac
- if test "X$additional_includedir" != "X"; then
- dnl Potentially add $additional_includedir to $INCNAME.
- dnl But don't add it
- dnl 1. if it's the standard /usr/include,
- dnl 2. if it's /usr/local/include and we are using GCC on Linux,
- dnl 3. if it's already present in $CPPFLAGS or the already
- dnl constructed $INCNAME,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_includedir" != "X/usr/include"; then
- haveit=
- if test "X$additional_includedir" = "X/usr/local/include"; then
- if test -n "$GCC"; then
- case $host_os in
- linux* | gnu* | k*bsd*-gnu) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- for x in $CPPFLAGS $INC[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-I$additional_includedir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$additional_includedir"; then
- dnl Really add $additional_includedir to $INCNAME.
- INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
- fi
- fi
- fi
- fi
- fi
- dnl Look for dependencies.
- if test -n "$found_la"; then
- dnl Read the .la file. It defines the variables
- dnl dlname, library_names, old_library, dependency_libs, current,
- dnl age, revision, installed, dlopen, dlpreopen, libdir.
- save_libdir="$libdir"
- case "$found_la" in
- */* | *\\*) . "$found_la" ;;
- *) . "./$found_la" ;;
- esac
- libdir="$save_libdir"
- dnl We use only dependency_libs.
- for dep in $dependency_libs; do
- case "$dep" in
- -L*)
- additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
- dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
- dnl But don't add it
- dnl 1. if it's the standard /usr/lib,
- dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
- dnl 3. if it's already present in $LDFLAGS or the already
- dnl constructed $LIBNAME,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_libdir" != "X/usr/lib"; then
- haveit=
- if test "X$additional_libdir" = "X/usr/local/lib"; then
- if test -n "$GCC"; then
- case $host_os in
- linux* | gnu* | k*bsd*-gnu) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- haveit=
- for x in $LDFLAGS $LIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$additional_libdir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$additional_libdir"; then
- dnl Really add $additional_libdir to $LIBNAME.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
- fi
- fi
- haveit=
- for x in $LDFLAGS $LTLIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$additional_libdir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$additional_libdir"; then
- dnl Really add $additional_libdir to $LTLIBNAME.
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
- fi
- fi
- fi
- fi
- ;;
- -R*)
- dir=`echo "X$dep" | sed -e 's/^X-R//'`
- if test "$enable_rpath" != no; then
- dnl Potentially add DIR to rpathdirs.
- dnl The rpathdirs will be appended to $LIBNAME at the end.
- haveit=
- for x in $rpathdirs; do
- if test "X$x" = "X$dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- rpathdirs="$rpathdirs $dir"
- fi
- dnl Potentially add DIR to ltrpathdirs.
- dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
- haveit=
- for x in $ltrpathdirs; do
- if test "X$x" = "X$dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- ltrpathdirs="$ltrpathdirs $dir"
- fi
- fi
- ;;
- -l*)
- dnl Handle this in the next round.
- names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
- ;;
- *.la)
- dnl Handle this in the next round. Throw away the .la's
- dnl directory; it is already contained in a preceding -L
- dnl option.
- names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
- ;;
- *)
- dnl Most likely an immediate library name.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
- ;;
- esac
- done
- fi
- else
- dnl Didn't find the library; assume it is in the system directories
- dnl known to the linker and runtime loader. (All the system
- dnl directories known to the linker should also be known to the
- dnl runtime loader, otherwise the system is severely misconfigured.)
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
- fi
- fi
- fi
- done
- done
- if test "X$rpathdirs" != "X"; then
- if test -n "$hardcode_libdir_separator"; then
- dnl Weird platform: only the last -rpath option counts, the user must
- dnl pass all path elements in one option. We can arrange that for a
- dnl single library, but not when more than one $LIBNAMEs are used.
- alldirs=
- for found_dir in $rpathdirs; do
- alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
- done
- dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
- acl_save_libdir="$libdir"
- libdir="$alldirs"
- eval flag=\"$hardcode_libdir_flag_spec\"
- libdir="$acl_save_libdir"
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
- else
- dnl The -rpath options are cumulative.
- for found_dir in $rpathdirs; do
- acl_save_libdir="$libdir"
- libdir="$found_dir"
- eval flag=\"$hardcode_libdir_flag_spec\"
- libdir="$acl_save_libdir"
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
- done
- fi
- fi
- if test "X$ltrpathdirs" != "X"; then
- dnl When using libtool, the option that works for both libraries and
- dnl executables is -R. The -R options are cumulative.
- for found_dir in $ltrpathdirs; do
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
- done
- fi
-])
-
-dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
-dnl unless already present in VAR.
-dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
-dnl contains two or three consecutive elements that belong together.
-AC_DEFUN([AC_LIB_APPENDTOVAR],
-[
- for element in [$2]; do
- haveit=
- for x in $[$1]; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X$element"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- [$1]="${[$1]}${[$1]:+ }$element"
- fi
- done
-])
-
-# lib-ld.m4 serial 3 (gettext-0.13)
-dnl Copyright (C) 1996-2003 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 Subroutines of libtool.m4,
-dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
-dnl with libtool.m4.
-
-dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
-AC_DEFUN([AC_LIB_PROG_LD_GNU],
-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
- acl_cv_prog_gnu_ld=yes ;;
-*)
- acl_cv_prog_gnu_ld=no ;;
-esac])
-with_gnu_ld=$acl_cv_prog_gnu_ld
-])
-
-dnl From libtool-1.4. Sets the variable LD.
-AC_DEFUN([AC_LIB_PROG_LD],
-[AC_ARG_WITH(gnu-ld,
-[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
-test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-# Prepare PATH_SEPARATOR.
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
-fi
-ac_prog=ld
-if test "$GCC" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- AC_MSG_CHECKING([for ld used by GCC])
- case $host in
- *-*-mingw*)
- # gcc leaves a trailing carriage return which upsets mingw
- ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
- *)
- ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
- esac
- case $ac_prog in
- # Accept absolute paths.
- [[\\/]* | [A-Za-z]:[\\/]*)]
- [re_direlt='/[^/][^/]*/\.\./']
- # Canonicalize the path of ld
- ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
- while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
- done
- test -z "$LD" && LD="$ac_prog"
- ;;
- "")
- # If it fails, then pretend we aren't using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
-elif test "$with_gnu_ld" = yes; then
- AC_MSG_CHECKING([for GNU ld])
-else
- AC_MSG_CHECKING([for non-GNU ld])
-fi
-AC_CACHE_VAL(acl_cv_path_LD,
-[if test -z "$LD"; then
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- acl_cv_path_LD="$ac_dir/$ac_prog"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some GNU ld's only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
- *GNU* | *'with BFD'*)
- test "$with_gnu_ld" != no && break ;;
- *)
- test "$with_gnu_ld" != yes && break ;;
- esac
- fi
- done
- IFS="$ac_save_ifs"
-else
- acl_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$acl_cv_path_LD"
-if test -n "$LD"; then
- AC_MSG_RESULT($LD)
-else
- AC_MSG_RESULT(no)
-fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-AC_LIB_PROG_LD_GNU
-])
-
-dnl @synopsis AC_JNI_INCLUDE_DIR
-dnl
-dnl AC_JNI_INCLUDE_DIR finds include directories needed
-dnl for compiling programs using the JNI interface.
-dnl
-dnl JNI include directories are usually in the java distribution
-dnl This is deduced from the value of JAVAC. When this macro
-dnl completes, a list of directories is left in the variable
-dnl JNI_INCLUDE_DIRS.
-dnl
-dnl Example usage follows:
-dnl
-dnl AC_JNI_INCLUDE_DIR
-dnl
-dnl for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS
-dnl do
-dnl CPPFLAGS="$CPPFLAGS -I$JNI_INCLUDE_DIR"
-dnl done
-dnl
-dnl If you want to force a specific compiler:
-dnl
-dnl - at the configure.in level, set JAVAC=yourcompiler before calling
-dnl AC_JNI_INCLUDE_DIR
-dnl
-dnl - at the configure level, setenv JAVAC
-dnl
-dnl Note: This macro can work with the autoconf M4 macros for Java programs.
-dnl This particular macro is not part of the original set of macros.
-dnl
-dnl @author Don Anderson <dda@sleepycat.com>
-dnl @version $Id: ac_jni_include_dirs.m4,v 1.3 2004/12/24 01:16:37 guidod Exp $
-dnl
-AC_DEFUN([AC_JNI_INCLUDE_DIR],[
-
-JNI_INCLUDE_DIRS=""
-
-test "x$JAVAC" = x && AC_MSG_ERROR(['$JAVAC' undefined])
-AC_PATH_PROG(_ACJNI_JAVAC, $JAVAC, no)
-test "x$_ACJNI_JAVAC" = xno && AC_MSG_ERROR([$JAVAC could not be found in path])
-
-_ACJNI_FOLLOW_SYMLINKS("$_ACJNI_JAVAC")
-_JTOPDIR=`echo "$_ACJNI_FOLLOWED" | sed -e 's://*:/:g' -e 's:/[[^/]]*$::'`
-case "$host_os" in
- darwin*) _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[[^/]]*$::'`
- _JINC="$_JTOPDIR/Headers";;
- *) _JINC="$_JTOPDIR/include";;
-esac
-if test -f "$_JINC/jni.h"; then
- JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JINC"
-else
- _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[[^/]]*$::'`
- if test -f "$_JTOPDIR/include/jni.h"; then
- JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include"
- else
- AC_MSG_ERROR([cannot find java include files])
- fi
-fi
-
-# get the likely subdirectories for system specific java includes
-case "$host_os" in
-bsdi*) _JNI_INC_SUBDIRS="bsdos";;
-linux*) _JNI_INC_SUBDIRS="linux genunix";;
-osf*) _JNI_INC_SUBDIRS="alpha";;
-solaris*) _JNI_INC_SUBDIRS="solaris";;
-mingw*) _JNI_INC_SUBDIRS="win32";;
-cygwin*) _JNI_INC_SUBDIRS="win32";;
-*) _JNI_INC_SUBDIRS="genunix";;
-esac
-
-# add any subdirectories that are present
-for JINCSUBDIR in $_JNI_INC_SUBDIRS
-do
- if test -d "$_JTOPDIR/include/$JINCSUBDIR"; then
- JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include/$JINCSUBDIR"
- fi
-done
-])
-
-# _ACJNI_FOLLOW_SYMLINKS <path>
-# Follows symbolic links on <path>,
-# finally setting variable _ACJNI_FOLLOWED
-# --------------------
-AC_DEFUN([_ACJNI_FOLLOW_SYMLINKS],[
-# find the include directory relative to the javac executable
-_cur="$1"
-while ls -ld "$_cur" 2>/dev/null | grep " -> " >/dev/null; do
- AC_MSG_CHECKING(symlink for $_cur)
- _slink=`ls -ld "$_cur" | sed 's/.* -> //'`
- case "$_slink" in
- /*) _cur="$_slink";;
- # 'X' avoids triggering unwanted echo options.
- *) _cur=`echo "X$_cur" | sed -e 's/^X//' -e 's:[[^/]]*$::'`"$_slink";;
- esac
- AC_MSG_RESULT($_cur)
-done
-_ACJNI_FOLLOWED="$_cur"
-])# _ACJNI
-
diff --git a/autogen.sh b/autogen.sh
deleted file mode 100755
index afa202d..0000000
--- a/autogen.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-# Run this to generate all the initial makefiles, etc.
-
-srcdir=`dirname $0`
-test -z "$srcdir" && srcdir=.
-
-
-aclocal -I m4
-autoheader
-autoconf
-./configure $*
diff --git a/autom4te.cache/output.0 b/autom4te.cache/output.0
deleted file mode 100644
index b62c539..0000000
--- a/autom4te.cache/output.0
+++ /dev/null
@@ -1,7729 +0,0 @@
-@%:@! /bin/sh
-@%:@ Guess values for system-dependent variables and create Makefiles.
-@%:@ Generated by GNU Autoconf 2.57.
-@%:@
-@%:@ 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.
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
- set -o posix
-fi
-
-# Support unset when possible.
-if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
- LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
- LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
- LC_TELEPHONE LC_TIME
-do
- if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
- eval $as_var=C; export $as_var
- else
- $as_unset $as_var
- fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename "$0" ||
-$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" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.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
- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
- 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
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
-else
- as_mkdir_p=false
-fi
-
-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
-
-
-# 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
-ac_config_libobj_dir=.
-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="cgi/cgi.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"
-
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP LN_S AR RANLIB ac_ct_RANLIB SET_MAKE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA EGREP build build_cpu build_vendor build_os host host_cpu host_vendor host_os _ACJNI_JAVAC USE_MINGW32 APXS_PATH PERL RUBY BUILD_WRAPPERS JAVA_PATH JAVA_INCLUDE_PATH PYTHON PYTHON_INC PYTHON_LIB PYTHON_SITE EXTRA_UTL_SRC EXTRA_UTL_OBJS CSHARP_PATH LIB@&t@OBJS LTLIBOBJS'
-ac_subst_files=''
-
-# 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
-(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
- { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
- { (exit 1); exit 1; }; }
-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
-
-System types:
- --build=BUILD configure for building on BUILD [guessed]
- --host=HOST cross-compile to build programs to run on HOST [BUILD]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-
- cat <<\_ACEOF
-
-Optional Features:
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --disable-wdb Disables building of wdb
- --disable-compression Disables HTML Compression support
- --enable-remote-debugger Enables remote X CGI debugging
- --disable-apache Disables building of apache 1.3.x module
- --disable-python Disables building of python module
- --disable-perl Disables building of perl module
- --disable-ruby Disables building of ruby module
- --disable-java Disables building of java module
- --disable-csharp Disables building of csharp module
- --enable-gettext Enables gettext message translation
-
-Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-apache=path Set location of Apache installation
- --with-python=path Set location of Python Interpreter
- --with-perl=path Set location of Perl binary
- --with-ruby=path Set location of Ruby binary
- --with-java=path Set location of J2SDK
- --with-csharp=path Set location of csharp
-
-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.57. 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.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_sep=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
- for ac_arg
- do
- case $ac_arg in
- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- continue ;;
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
- ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
- 2)
- ac_configure_args1="$ac_configure_args1 '$ac_arg'"
- if test $ac_must_keep_next = true; then
- ac_must_keep_next=false # Got value, back to normal.
- else
- case $ac_arg in
- *=* | --config-cache | -C | -disable-* | --disable-* \
- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
- | -with-* | --with-* | -without-* | --without-* | --x)
- case "$ac_configure_args0 " in
- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
- esac
- ;;
- -* ) ac_must_keep_next=true ;;
- esac
- fi
- ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
- # Get rid of the leading space.
- ac_sep=" "
- ;;
- esac
- done
-done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
-
-# 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
-
- cat <<\_ASBOX
-@%:@@%:@ ----------------- @%:@@%:@
-@%:@@%:@ Output variables. @%:@@%:@
-@%:@@%:@ ----------------- @%:@@%:@
-_ASBOX
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=$`echo $ac_var`
- echo "$ac_var='"'"'$ac_val'"'"'"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- cat <<\_ASBOX
-@%:@@%:@ ------------- @%:@@%:@
-@%:@@%:@ Output files. @%:@@%:@
-@%:@@%:@ ------------- @%:@@%:@
-_ASBOX
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=$`echo $ac_var`
- echo "$ac_var='"'"'$ac_val'"'"'"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- cat <<\_ASBOX
-@%:@@%:@ ----------- @%:@@%:@
-@%:@@%:@ confdefs.h. @%:@@%:@
-@%:@@%:@ ----------- @%:@@%:@
-_ASBOX
- echo
- sed "/^$/d" confdefs.h | sort
- 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 cs_config.h"
-
-
-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
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
- 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
-See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.exe b.out"
-# 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=
-# b.out is created by i960 compilers.
-for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
- ;;
- conftest.$ac_ext )
- # This is the source file.
- ;;
- [ab].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,
- # but it would be cool to find out if it's true. Does anybody
- # maintain Libtool? --akim.
- export ac_cv_exeext
- break;;
- * )
- break;;
- esac
-done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details." >&5
-echo "$as_me: error: C compiler cannot create executables
-See \`config.log' for more details." >&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'.
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&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 b.out
-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 conftest.exe conftest conftest.*; do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
- *.* ) 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
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-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 | *.xSYM | *.bb | *.bbg ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-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
-sed 's/^/| /' 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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-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
-sed 's/^/| /' 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
-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_stdc+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_prog_cc_stdc=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX -qlanglvl=ansi
-# Ultrix and OSF/1 -std1
-# HP-UX 10.20 and later -Ae
-# HP-UX older versions -Aa -D_HPUX_SOURCE
-# SVR4 -Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- 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_stdc=$ac_arg
-break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.$ac_objext
-done
-rm -f conftest.$ac_ext conftest.$ac_objext
-CC=$ac_save_CC
-
-fi
-
-case "x$ac_cv_prog_cc_stdc" in
- x|xno)
- echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
- *)
- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
- CC="$CC $ac_cv_prog_cc_stdc" ;;
-esac
-
-# 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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-@%:@include <stdlib.h>
-$ac_declaration
-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
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_declaration
-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
-sed 's/^/| /' 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
-sed 's/^/| /' 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
-
-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.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # 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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-@%:@ifdef __STDC__
-@%:@ include <limits.h>
-@%:@else
-@%:@ include <assert.h>
-@%:@endif
- 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=$?
- grep -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
-sed 's/^/| /' 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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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=$?
- grep -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
-sed 's/^/| /' 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.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # 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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-@%:@ifdef __STDC__
-@%:@ include <limits.h>
-@%:@else
-@%:@ include <assert.h>
-@%:@endif
- 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=$?
- grep -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
-sed 's/^/| /' 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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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=$?
- grep -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
-sed 's/^/| /' 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
-See \`config.log' for more details." >&5
-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&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 whether ln -s works" >&5
-echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
- echo "$as_me:$LINENO: result: no, using $LN_S" >&5
-echo "${ECHO_T}no, using $LN_S" >&6
-fi
-
-for ac_prog in ar aal
-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_AR+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$AR"; then
- ac_cv_prog_AR="$AR" # 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_AR="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
- echo "$as_me:$LINENO: result: $AR" >&5
-echo "${ECHO_T}$AR" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$AR" && break
-done
-test -n "$AR" || AR="ar"
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; 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_RANLIB+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # 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_RANLIB="${ac_tool_prefix}ranlib"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
- echo "$as_me:$LINENO: result: $RANLIB" >&5
-echo "${ECHO_T}$RANLIB" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
- ac_ct_RANLIB=$RANLIB
- # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; 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_RANLIB+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_RANLIB"; then
- ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # 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_RANLIB="ranlib"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
-echo "${ECHO_T}$ac_ct_RANLIB" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- RANLIB=$ac_ct_RANLIB
-else
- RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-
-echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'`
-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.make <<\_ACEOF
-all:
- @echo 'ac_maketemp="$(MAKE)"'
-_ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
-if test -n "$ac_maketemp"; then
- eval ac_cv_prog_make_${ac_make}_set=yes
-else
- eval ac_cv_prog_make_${ac_make}_set=no
-fi
-rm -f conftest.make
-fi
-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
- SET_MAKE=
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- SET_MAKE="MAKE=${MAKE-make}"
-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'
-
-
-echo "$as_me:$LINENO: checking for Neotonic Paths" >&5
-echo $ECHO_N "checking for Neotonic Paths... $ECHO_C" >&6
-if test -d /neo/opt/include; then
- echo "$as_me:$LINENO: result: found" >&5
-echo "${ECHO_T}found" >&6
- CPPFLAGS="$CPPFLAGS -I/neo/opt/include"
- LDFLAGS="$LDFLAGS -L/neo/opt/lib"
-else
- echo "$as_me:$LINENO: result: not found" >&5
-echo "${ECHO_T}not found" >&6
-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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <$ac_hdr>
-
-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
-sed 's/^/| /' 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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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 ();
-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
-sed 's/^/| /' 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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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 ();
-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
-sed 's/^/| /' 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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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 ();
-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
-sed 's/^/| /' 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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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 ();
-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
-sed 's/^/| /' 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
-
-
-echo "$as_me:$LINENO: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6
-if test "${ac_cv_prog_egrep+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if echo a | (grep -E '(a|b)') >/dev/null 2>&1
- then ac_cv_prog_egrep='grep -E'
- else ac_cv_prog_egrep='egrep'
- fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
-echo "${ECHO_T}$ac_cv_prog_egrep" >&6
- EGREP=$ac_cv_prog_egrep
-
-
-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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-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_header_stdc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_header_stdc=no
-fi
-rm -f conftest.$ac_objext 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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_header_stdc=no
-fi
-rm -f core core.* *.core gmon.out bb.out 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
-
-echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5
-echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6
-if test "${ac_cv_header_sys_wait_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <sys/wait.h>
-#ifndef WEXITSTATUS
-# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
-#endif
-#ifndef WIFEXITED
-# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
-#endif
-
-int
-main ()
-{
- int s;
- wait (&s);
- s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
- ;
- 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_header_sys_wait_h=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_header_sys_wait_h=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6
-if test $ac_cv_header_sys_wait_h = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-@%:@define HAVE_SYS_WAIT_H 1
-_ACEOF
-
-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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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
-sed 's/^/| /' 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 fcntl.h stdarg.h varargs.h limits.h strings.h sys/ioctl.h sys/time.h 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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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
-sed 's/^/| /' 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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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=$?
- grep -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
-sed 's/^/| /' 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;}
- (
- cat <<\_ASBOX
-@%:@@%:@ ------------------------------------ @%:@@%:@
-@%:@@%:@ Report this to bug-autoconf@gnu.org. @%:@@%:@
-@%:@@%:@ ------------------------------------ @%:@@%:@
-_ASBOX
- ) |
- sed "s/^/$as_me: WARNING: /" >&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;}
- (
- cat <<\_ASBOX
-@%:@@%:@ ------------------------------------ @%:@@%:@
-@%:@@%:@ Report this to bug-autoconf@gnu.org. @%:@@%:@
-@%:@@%:@ ------------------------------------ @%:@@%:@
-_ASBOX
- ) |
- sed "s/^/$as_me: WARNING: /" >&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
-
-
-echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
-echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
-if test "${ac_cv_c_const+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-/* FIXME: Include the comments suggested by Paul. */
-#ifndef __cplusplus
- /* Ultrix mips cc rejects this. */
- typedef int charset[2];
- const charset x;
- /* SunOS 4.1.1 cc rejects this. */
- char const *const *ccp;
- char **p;
- /* NEC SVR4.0.2 mips cc rejects this. */
- struct point {int x, y;};
- static struct point const zero = {0,0};
- /* AIX XL C 1.02.0.0 rejects this.
- It does not let you subtract one const X* pointer from another in
- an arm of an if-expression whose if-part is not a constant
- expression */
- const char *g = "string";
- ccp = &g + (g ? g-g : 0);
- /* HPUX 7.0 cc rejects these. */
- ++ccp;
- p = (char**) ccp;
- ccp = (char const *const *) p;
- { /* SCO 3.2v4 cc rejects this. */
- char *t;
- char const *s = 0 ? (char *) 0 : (char const *) 0;
-
- *t++ = 0;
- }
- { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
- int x[] = {25, 17};
- const int *foo = &x[0];
- ++foo;
- }
- { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
- typedef const int *iptr;
- iptr p = 0;
- ++p;
- }
- { /* AIX XL C 1.02.0.0 rejects this saying
- "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
- struct s { int j; const int *ap[3]; };
- struct s *b; b->j = 5;
- }
- { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
- const int foo = 10;
- }
-#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_cv_c_const=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_c_const=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
-echo "${ECHO_T}$ac_cv_c_const" >&6
-if test $ac_cv_c_const = no; then
-
-cat >>confdefs.h <<\_ACEOF
-@%:@define const
-_ACEOF
-
-fi
-
-echo "$as_me:$LINENO: checking for mode_t" >&5
-echo $ECHO_N "checking for mode_t... $ECHO_C" >&6
-if test "${ac_cv_type_mode_t+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-if ((mode_t *) 0)
- return 0;
-if (sizeof (mode_t))
- 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
- ac_cv_type_mode_t=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_type_mode_t=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_type_mode_t" >&5
-echo "${ECHO_T}$ac_cv_type_mode_t" >&6
-if test $ac_cv_type_mode_t = yes; then
- :
-else
-
-cat >>confdefs.h <<_ACEOF
-@%:@define mode_t int
-_ACEOF
-
-fi
-
-echo "$as_me:$LINENO: checking for off_t" >&5
-echo $ECHO_N "checking for off_t... $ECHO_C" >&6
-if test "${ac_cv_type_off_t+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-if ((off_t *) 0)
- return 0;
-if (sizeof (off_t))
- 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
- ac_cv_type_off_t=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_type_off_t=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
-echo "${ECHO_T}$ac_cv_type_off_t" >&6
-if test $ac_cv_type_off_t = yes; then
- :
-else
-
-cat >>confdefs.h <<_ACEOF
-@%:@define off_t long
-_ACEOF
-
-fi
-
-echo "$as_me:$LINENO: checking for pid_t" >&5
-echo $ECHO_N "checking for pid_t... $ECHO_C" >&6
-if test "${ac_cv_type_pid_t+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-if ((pid_t *) 0)
- return 0;
-if (sizeof (pid_t))
- 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
- ac_cv_type_pid_t=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_type_pid_t=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5
-echo "${ECHO_T}$ac_cv_type_pid_t" >&6
-if test $ac_cv_type_pid_t = yes; then
- :
-else
-
-cat >>confdefs.h <<_ACEOF
-@%:@define pid_t int
-_ACEOF
-
-fi
-
-echo "$as_me:$LINENO: checking for size_t" >&5
-echo $ECHO_N "checking for size_t... $ECHO_C" >&6
-if test "${ac_cv_type_size_t+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-if ((size_t *) 0)
- return 0;
-if (sizeof (size_t))
- 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
- ac_cv_type_size_t=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_type_size_t=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
-echo "${ECHO_T}$ac_cv_type_size_t" >&6
-if test $ac_cv_type_size_t = yes; then
- :
-else
-
-cat >>confdefs.h <<_ACEOF
-@%:@define size_t unsigned
-_ACEOF
-
-fi
-
-echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
-echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6
-if test "${ac_cv_header_time+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <sys/time.h>
-#include <time.h>
-
-int
-main ()
-{
-if ((struct tm *) 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
- ac_cv_header_time=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_header_time=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5
-echo "${ECHO_T}$ac_cv_header_time" >&6
-if test $ac_cv_header_time = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-@%:@define TIME_WITH_SYS_TIME 1
-_ACEOF
-
-fi
-
-echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5
-echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6
-if test "${ac_cv_struct_tm+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <time.h>
-
-int
-main ()
-{
-struct tm *tp; tp->tm_sec;
- ;
- 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_struct_tm=time.h
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_struct_tm=sys/time.h
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5
-echo "${ECHO_T}$ac_cv_struct_tm" >&6
-if test $ac_cv_struct_tm = sys/time.h; then
-
-cat >>confdefs.h <<\_ACEOF
-@%:@define TM_IN_SYS_TIME 1
-_ACEOF
-
-fi
-
-echo "$as_me:$LINENO: checking for struct tm.tm_zone" >&5
-echo $ECHO_N "checking for struct tm.tm_zone... $ECHO_C" >&6
-if test "${ac_cv_member_struct_tm_tm_zone+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <$ac_cv_struct_tm>
-
-
-int
-main ()
-{
-static struct tm ac_aggr;
-if (ac_aggr.tm_zone)
-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
- ac_cv_member_struct_tm_tm_zone=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <$ac_cv_struct_tm>
-
-
-int
-main ()
-{
-static struct tm ac_aggr;
-if (sizeof ac_aggr.tm_zone)
-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
- ac_cv_member_struct_tm_tm_zone=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_member_struct_tm_tm_zone=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_member_struct_tm_tm_zone" >&5
-echo "${ECHO_T}$ac_cv_member_struct_tm_tm_zone" >&6
-if test $ac_cv_member_struct_tm_tm_zone = yes; then
-
-cat >>confdefs.h <<_ACEOF
-@%:@define HAVE_STRUCT_TM_TM_ZONE 1
-_ACEOF
-
-
-fi
-
-if test "$ac_cv_member_struct_tm_tm_zone" = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-@%:@define HAVE_TM_ZONE 1
-_ACEOF
-
-else
- echo "$as_me:$LINENO: checking for tzname" >&5
-echo $ECHO_N "checking for tzname... $ECHO_C" >&6
-if test "${ac_cv_var_tzname+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <time.h>
-#ifndef tzname /* For SGI. */
-extern char *tzname[]; /* RS6000 and others reject char **tzname. */
-#endif
-
-int
-main ()
-{
-atoi(*tzname);
- ;
- 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_var_tzname=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_var_tzname=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_var_tzname" >&5
-echo "${ECHO_T}$ac_cv_var_tzname" >&6
- if test $ac_cv_var_tzname = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-@%:@define HAVE_TZNAME 1
-_ACEOF
-
- fi
-fi
-
-
-echo "$as_me:$LINENO: checking return type of signal handlers" >&5
-echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6
-if test "${ac_cv_type_signal+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <signal.h>
-#ifdef signal
-# undef signal
-#endif
-#ifdef __cplusplus
-extern "C" void (*signal (int, void (*)(int)))(int);
-#else
-void (*signal ()) ();
-#endif
-
-int
-main ()
-{
-int i;
- ;
- 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_type_signal=void
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_type_signal=int
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5
-echo "${ECHO_T}$ac_cv_type_signal" >&6
-
-cat >>confdefs.h <<_ACEOF
-@%:@define RETSIGTYPE $ac_cv_type_signal
-_ACEOF
-
-
-
-for ac_func in strftime
-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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-/* 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 ();
-/* 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
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- 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
-sed 's/^/| /' 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
-
-else
- # strftime is in -lintl on SCO UNIX.
-echo "$as_me:$LINENO: checking for strftime in -lintl" >&5
-echo $ECHO_N "checking for strftime in -lintl... $ECHO_C" >&6
-if test "${ac_cv_lib_intl_strftime+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lintl $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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 strftime ();
-int
-main ()
-{
-strftime ();
- ;
- 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_intl_strftime=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_intl_strftime=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_intl_strftime" >&5
-echo "${ECHO_T}$ac_cv_lib_intl_strftime" >&6
-if test $ac_cv_lib_intl_strftime = yes; then
- cat >>confdefs.h <<\_ACEOF
-@%:@define HAVE_STRFTIME 1
-_ACEOF
-
-LIBS="-lintl $LIBS"
-fi
-
-fi
-done
-
-
-for ac_func in vprintf
-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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-/* 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 ();
-/* 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
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- 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
-sed 's/^/| /' 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
-
-echo "$as_me:$LINENO: checking for _doprnt" >&5
-echo $ECHO_N "checking for _doprnt... $ECHO_C" >&6
-if test "${ac_cv_func__doprnt+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char _doprnt (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-/* 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 _doprnt ();
-/* 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__doprnt) || defined (__stub____doprnt)
-choke me
-#else
-char (*f) () = _doprnt;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != _doprnt;
- ;
- 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_func__doprnt=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func__doprnt=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5
-echo "${ECHO_T}$ac_cv_func__doprnt" >&6
-if test $ac_cv_func__doprnt = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-@%:@define HAVE_DOPRNT 1
-_ACEOF
-
-fi
-
-fi
-done
-
-
-echo "$as_me:$LINENO: checking for wait3 that fills in rusage" >&5
-echo $ECHO_N "checking for wait3 that fills in rusage... $ECHO_C" >&6
-if test "${ac_cv_func_wait3_rusage+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$cross_compiling" = yes; then
- ac_cv_func_wait3_rusage=no
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-#include <stdio.h>
-/* HP-UX has wait3 but does not fill in rusage at all. */
-int
-main ()
-{
- struct rusage r;
- int i;
- /* Use a field that we can force nonzero --
- voluntary context switches.
- For systems like NeXT and OSF/1 that don't set it,
- also use the system CPU time. And page faults (I/O) for Linux. */
- r.ru_nvcsw = 0;
- r.ru_stime.tv_sec = 0;
- r.ru_stime.tv_usec = 0;
- r.ru_majflt = r.ru_minflt = 0;
- switch (fork ())
- {
- case 0: /* Child. */
- sleep(1); /* Give up the CPU. */
- _exit(0);
- break;
- case -1: /* What can we do? */
- _exit(0);
- break;
- default: /* Parent. */
- wait3(&i, 0, &r);
- /* Avoid "text file busy" from rm on fast HP-UX machines. */
- sleep(2);
- exit (r.ru_nvcsw == 0 && r.ru_majflt == 0 && r.ru_minflt == 0
- && r.ru_stime.tv_sec == 0 && r.ru_stime.tv_usec == 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
- ac_cv_func_wait3_rusage=yes
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_func_wait3_rusage=no
-fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_wait3_rusage" >&5
-echo "${ECHO_T}$ac_cv_func_wait3_rusage" >&6
-if test $ac_cv_func_wait3_rusage = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-@%:@define HAVE_WAIT3 1
-_ACEOF
-
-fi
-
-
-
-
-
-
-
-
-
-for ac_func in gettimeofday mktime putenv strerror strspn strtod strtol strtoul
-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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-/* 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 ();
-/* 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
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- 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
-sed 's/^/| /' 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
-
-
-
-
-for ac_func in random rand drand48
-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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-/* 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 ();
-/* 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
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- 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
-sed 's/^/| /' 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
-
-
-EXTRA_UTL_OBJS=
-EXTRA_UTL_SRC=
-cs_cv_wdb=no
-# Check whether --enable-apache or --disable-apache was given.
-if test "${enable_apache+set}" = set; then
- enableval="$enable_apache"
- if test $enableval = no; then
- echo "$as_me:$LINENO: result: Disabling wdb code" >&5
-echo "${ECHO_T}Disabling wdb code" >&6
- else
- echo "$as_me:$LINENO: checking for library containing db_open" >&5
-echo $ECHO_N "checking for library containing db_open... $ECHO_C" >&6
-if test "${ac_cv_search_db_open+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_func_search_save_LIBS=$LIBS
-ac_cv_search_db_open=no
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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 db_open ();
-int
-main ()
-{
-db_open ();
- ;
- 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_db_open="none required"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-if test "$ac_cv_search_db_open" = no; then
- for ac_lib in db db2; do
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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 db_open ();
-int
-main ()
-{
-db_open ();
- ;
- 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_db_open="-l$ac_lib"
-break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' 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_db_open" >&5
-echo "${ECHO_T}$ac_cv_search_db_open" >&6
-if test "$ac_cv_search_db_open" != no; then
- test "$ac_cv_search_db_open" = "none required" || LIBS="$ac_cv_search_db_open $LIBS"
- cs_cv_wdb=yes
-fi
-
- if test $cs_cv_wdb = yes; then
- cat >>confdefs.h <<\_ACEOF
-@%:@define HAVE_DB2 1
-_ACEOF
-
- EXTRA_UTL_SRC="$EXTRA_UTL_SRC wdb.c"
- fi
- fi
-fi;
-
-echo "$as_me:$LINENO: checking for lockf" >&5
-echo $ECHO_N "checking for lockf... $ECHO_C" >&6
-if test "${ac_cv_func_lockf+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char lockf (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-/* 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 lockf ();
-/* 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_lockf) || defined (__stub___lockf)
-choke me
-#else
-char (*f) () = lockf;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != lockf;
- ;
- 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_func_lockf=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_lockf=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_lockf" >&5
-echo "${ECHO_T}$ac_cv_func_lockf" >&6
-if test $ac_cv_func_lockf = yes; then
-
- cat >>confdefs.h <<\_ACEOF
-@%:@define HAVE_LOCKF 1
-_ACEOF
-
- EXTRA_UTL_SRC="$EXTRA_UTL_SRC ulocks.c rcfs.c"
-
- cs_cv_pthread=no
- if test "${ac_cv_header_pthread_h+set}" = set; then
- echo "$as_me:$LINENO: checking for pthread.h" >&5
-echo $ECHO_N "checking for pthread.h... $ECHO_C" >&6
-if test "${ac_cv_header_pthread_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_pthread_h" >&5
-echo "${ECHO_T}$ac_cv_header_pthread_h" >&6
-else
- # Is the header compilable?
-echo "$as_me:$LINENO: checking pthread.h usability" >&5
-echo $ECHO_N "checking pthread.h usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-@%:@include <pthread.h>
-_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
-sed 's/^/| /' 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 pthread.h presence" >&5
-echo $ECHO_N "checking pthread.h presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-@%:@include <pthread.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=$?
- grep -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
-sed 's/^/| /' 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: pthread.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: pthread.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: pthread.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: pthread.h: proceeding with the preprocessor's result" >&2;}
- (
- cat <<\_ASBOX
-@%:@@%:@ ------------------------------------ @%:@@%:@
-@%:@@%:@ Report this to bug-autoconf@gnu.org. @%:@@%:@
-@%:@@%:@ ------------------------------------ @%:@@%:@
-_ASBOX
- ) |
- sed "s/^/$as_me: WARNING: /" >&2
- ;;
- no:yes )
- { echo "$as_me:$LINENO: WARNING: pthread.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: pthread.h: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: pthread.h: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: pthread.h: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: pthread.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: pthread.h: proceeding with the preprocessor's result" >&2;}
- (
- cat <<\_ASBOX
-@%:@@%:@ ------------------------------------ @%:@@%:@
-@%:@@%:@ Report this to bug-autoconf@gnu.org. @%:@@%:@
-@%:@@%:@ ------------------------------------ @%:@@%:@
-_ASBOX
- ) |
- sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-echo "$as_me:$LINENO: checking for pthread.h" >&5
-echo $ECHO_N "checking for pthread.h... $ECHO_C" >&6
-if test "${ac_cv_header_pthread_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_header_pthread_h=$ac_header_preproc
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_pthread_h" >&5
-echo "${ECHO_T}$ac_cv_header_pthread_h" >&6
-
-fi
-if test $ac_cv_header_pthread_h = yes; then
- cs_cv_pthread=yes
-fi
-
-
- if test $cs_cv_pthread = yes; then
- cat >>confdefs.h <<\_ACEOF
-@%:@define HAVE_PTHREADS 1
-_ACEOF
-
- EXTRA_UTL_SRC="$EXTRA_UTL_SRC skiplist.c dict.c"
- fi
-
-fi
-
-
-# Make sure we can run config.sub.
-$ac_config_sub sun4 >/dev/null 2>&1 ||
- { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
-echo "$as_me: error: cannot run $ac_config_sub" >&2;}
- { (exit 1); exit 1; }; }
-
-echo "$as_me:$LINENO: checking build system type" >&5
-echo $ECHO_N "checking build system type... $ECHO_C" >&6
-if test "${ac_cv_build+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_build_alias=$build_alias
-test -z "$ac_cv_build_alias" &&
- ac_cv_build_alias=`$ac_config_guess`
-test -z "$ac_cv_build_alias" &&
- { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
-echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
- { (exit 1); exit 1; }; }
-ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
- { (exit 1); exit 1; }; }
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_build" >&5
-echo "${ECHO_T}$ac_cv_build" >&6
-build=$ac_cv_build
-build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-
-echo "$as_me:$LINENO: checking host system type" >&5
-echo $ECHO_N "checking host system type... $ECHO_C" >&6
-if test "${ac_cv_host+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_host_alias=$host_alias
-test -z "$ac_cv_host_alias" &&
- ac_cv_host_alias=$ac_cv_build_alias
-ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
- { (exit 1); exit 1; }; }
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_host" >&5
-echo "${ECHO_T}$ac_cv_host" >&6
-host=$ac_cv_host
-host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-
-case $host_os in
- *mingw32* ) MINGW32=yes;;
- * ) MINGW32=no;;
-esac
-
-if test "x$MINGW32" = "xyes"; then
- CPPFLAGS="$CPPFLAGS -D__WINDOWS_GCC__"
- USE_MINGW32="USE_MINGW32 = 1"
-else
- EXTRA_UTL_SRC="$EXTRA_UTL_SRC filter.c neo_net.c neo_server.c"
-fi
-
-cs_cv_snprintf=no
-SNPRINTFOBJS=""
-echo "$as_me:$LINENO: checking for snprintf" >&5
-echo $ECHO_N "checking for snprintf... $ECHO_C" >&6
-if test "${ac_cv_func_snprintf+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char snprintf (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-/* 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 snprintf ();
-/* 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_snprintf) || defined (__stub___snprintf)
-choke me
-#else
-char (*f) () = snprintf;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != snprintf;
- ;
- 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_func_snprintf=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_snprintf=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_snprintf" >&5
-echo "${ECHO_T}$ac_cv_func_snprintf" >&6
-if test $ac_cv_func_snprintf = yes; then
- cat >>confdefs.h <<\_ACEOF
-@%:@define HAVE_SNPRINTF 1
-_ACEOF
-
-else
- cs_cv_snprintf=yes
-fi
-
-echo "$as_me:$LINENO: checking for vsnprintf" >&5
-echo $ECHO_N "checking for vsnprintf... $ECHO_C" >&6
-if test "${ac_cv_func_vsnprintf+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char vsnprintf (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-/* 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 vsnprintf ();
-/* 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_vsnprintf) || defined (__stub___vsnprintf)
-choke me
-#else
-char (*f) () = vsnprintf;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != vsnprintf;
- ;
- 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_func_vsnprintf=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_vsnprintf=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_vsnprintf" >&5
-echo "${ECHO_T}$ac_cv_func_vsnprintf" >&6
-if test $ac_cv_func_vsnprintf = yes; then
- cat >>confdefs.h <<\_ACEOF
-@%:@define HAVE_VSNPRINTF 1
-_ACEOF
-
-else
- cs_cv_snprintf=yes
-fi
-
-if test $cs_cv_snprintf = yes; then
- EXTRA_UTL_OBJS="$EXTRA_UTL_OBJS snprintf.o"
-fi
-
-
-cs_cv_missing=no
-cs_cv_need_reentrant=no
-
-for ac_func in localtime_r
-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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-/* 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 ();
-/* 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
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- 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
-sed 's/^/| /' 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
-
- echo "$as_me:$LINENO: checking whether localtime_r is declared" >&5
-echo $ECHO_N "checking whether localtime_r is declared... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#include <time.h>
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "localtime_r" >/dev/null 2>&1; then
-
- cat >>confdefs.h <<\_ACEOF
-@%:@define HAVE_LOCALTIME_R 1
-_ACEOF
-
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
-
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- echo "$as_me:$LINENO: checking whether localtime_r with -D_REENTRANT is declared" >&5
-echo $ECHO_N "checking whether localtime_r with -D_REENTRANT is declared... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#define _REENTRANT
-#include <time.h>
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "localtime_r" >/dev/null 2>&1; then
-
- cs_cv_need_reentrant=yes
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
-
- cs_cv_missing=yes
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-rm -f conftest*
-
-fi
-rm -f conftest*
-
-else
- cs_cv_missing=yes
-fi
-done
-
-
-
-for ac_func in gmtime_r
-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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-/* 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 ();
-/* 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
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- 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
-sed 's/^/| /' 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
-
- echo "$as_me:$LINENO: checking whether gmtime_r is declared" >&5
-echo $ECHO_N "checking whether gmtime_r is declared... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#include <time.h>
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "gmtime_r" >/dev/null 2>&1; then
-
- cat >>confdefs.h <<\_ACEOF
-@%:@define HAVE_GMTIME_R 1
-_ACEOF
-
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
-
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- echo "$as_me:$LINENO: checking whether gmtime_r with -D_REENTRANT is declared" >&5
-echo $ECHO_N "checking whether gmtime_r with -D_REENTRANT is declared... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#define _REENTRANT
-#include <time.h>
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "gmtime_r" >/dev/null 2>&1; then
-
- cs_cv_need_reentrant=yes
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
-
- cs_cv_missing=yes
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-rm -f conftest*
-
-fi
-rm -f conftest*
-
-else
- cs_cv_missing=yes
-fi
-done
-
-
-
-for ac_func in strtok_r
-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"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-/* 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 ();
-/* 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
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- 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
-sed 's/^/| /' 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
-
- echo "$as_me:$LINENO: checking whether strtok_r is declared" >&5
-echo $ECHO_N "checking whether strtok_r is declared... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#include <string.h>
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "strtok_r" >/dev/null 2>&1; then
-
- cat >>confdefs.h <<\_ACEOF
-@%:@define HAVE_STRTOK_R 1
-_ACEOF
-
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
-
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- echo "$as_me:$LINENO: checking whether strtok_r with -D_REENTRANT is declared" >&5
-echo $ECHO_N "checking whether strtok_r with -D_REENTRANT is declared... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#define _REENTRANT
-#include <string.h>
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "strtok_r" >/dev/null 2>&1; then
-
- cs_cv_need_reentrant=yes
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
-
- cs_cv_missing=yes
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-rm -f conftest*
-
-fi
-rm -f conftest*
-
-else
- cs_cv_missing=yes
-fi
-done
-
-
-echo "$as_me:$LINENO: checking for mkstemp" >&5
-echo $ECHO_N "checking for mkstemp... $ECHO_C" >&6
-if test "${ac_cv_func_mkstemp+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char mkstemp (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-/* 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 mkstemp ();
-/* 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_mkstemp) || defined (__stub___mkstemp)
-choke me
-#else
-char (*f) () = mkstemp;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != mkstemp;
- ;
- 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_func_mkstemp=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_mkstemp=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_mkstemp" >&5
-echo "${ECHO_T}$ac_cv_func_mkstemp" >&6
-if test $ac_cv_func_mkstemp = yes; then
- cat >>confdefs.h <<\_ACEOF
-@%:@define HAVE_MKSTEMP 1
-_ACEOF
-
-else
- cs_cv_missing=yes
-fi
-
-if test $cs_cv_missing = yes; then
- EXTRA_UTL_OBJS="$EXTRA_UTL_OBJS missing.o"
-fi
-if test $cs_cv_need_reentrant = yes; then
- CPPFLAGS="$CPPFLAGS -D_REENTRANT"
-fi
-
-cs_cv_regex=yes
-echo "$as_me:$LINENO: checking for regexec" >&5
-echo $ECHO_N "checking for regexec... $ECHO_C" >&6
-if test "${ac_cv_func_regexec+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char regexec (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-/* 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 regexec ();
-/* 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_regexec) || defined (__stub___regexec)
-choke me
-#else
-char (*f) () = regexec;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != regexec;
- ;
- 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_func_regexec=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_regexec=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_regexec" >&5
-echo "${ECHO_T}$ac_cv_func_regexec" >&6
-if test $ac_cv_func_regexec = yes; then
- cat >>confdefs.h <<\_ACEOF
-@%:@define HAVE_REGEX 1
-_ACEOF
-
-else
- cs_cv_regex=no
-fi
-
-if test $cs_cv_regex = no; then
- CPPFLAGS="$CPPFLAGS -I\$(NEOTONIC_ROOT)/util/regex"
- EXTRA_UTL_SRC="$EXTRA_UTL_SRC regex/regex.c"
-fi
-
-cs_cv_compression=yes
-echo "$as_me:$LINENO: checking for deflate in -lz" >&5
-echo $ECHO_N "checking for deflate in -lz... $ECHO_C" >&6
-if test "${ac_cv_lib_z_deflate+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lz $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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 deflate ();
-int
-main ()
-{
-deflate ();
- ;
- 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_z_deflate=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_z_deflate=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_z_deflate" >&5
-echo "${ECHO_T}$ac_cv_lib_z_deflate" >&6
-if test $ac_cv_lib_z_deflate = yes; then
- cs_cv_compression=yes
-else
- cs_cv_compression=no
-fi
-
-# Check whether --enable-compression or --disable-compression was given.
-if test "${enable_compression+set}" = set; then
- enableval="$enable_compression"
- if test $enableval = no; then
- cs_cv_compression=no;
- echo "$as_me:$LINENO: result: Disabling HTML Compression support" >&5
-echo "${ECHO_T}Disabling HTML Compression support" >&6
- fi
-fi;
-
-if test $cs_cv_compression = yes; then
- cat >>confdefs.h <<\_ACEOF
-@%:@define HTML_COMPRESSION 1
-_ACEOF
-
- LIBS="$LIBS -lz"
-fi
-
-# Check whether --enable-remote-debugger or --disable-remote-debugger was given.
-if test "${enable_remote_debugger+set}" = set; then
- enableval="$enable_remote_debugger"
- if test $enableval = yes; then
- cat >>confdefs.h <<\_ACEOF
-@%:@define ENABLE_REMOTE_DEBUG 1
-_ACEOF
-
- echo "$as_me:$LINENO: result: Enabling CGI X Remote debugger" >&5
-echo "${ECHO_T}Enabling CGI X Remote debugger" >&6
- fi
-fi;
-
-cs_cv_apache=yes
-# Check whether --enable-apache or --disable-apache was given.
-if test "${enable_apache+set}" = set; then
- enableval="$enable_apache"
- if test $enableval = no; then
- cs_cv_apache=no;
- echo "$as_me:$LINENO: result: Disabling Apache 1.3.x Module" >&5
-echo "${ECHO_T}Disabling Apache 1.3.x Module" >&6
- fi
-fi;
-
-# Check whether --with-apache or --without-apache was given.
-if test "${with_apache+set}" = set; then
- withval="$with_apache"
- cs_cv_apache_path="$withval"
-else
- cs_cv_apache_path=
-fi;
-
-if test $cs_cv_apache = yes; then
- echo "$as_me:$LINENO: checking for apache apxs" >&5
-echo $ECHO_N "checking for apache apxs... $ECHO_C" >&6
- apxs_path=no
- apache_search_path="$cs_cv_apache_path /neo/opt /usr/local /usr"
- for path in $apache_search_path; do
- if test -x $path/httpd/bin/apxs; then
- apxs_path=$path/httpd/bin/apxs
- httpd_path=$path/httpd/bin/httpd
- break
- fi
- if test -x $path/httpd/sbin/apxs; then
- apxs_path=$path/httpd/sbin/apxs
- httpd_path=$path/httpd/sbin/httpd
- break
- fi
- if test -x $path/bin/apxs; then
- apxs_path=$path/bin/apxs
- httpd_path=$path/bin/httpd
- break
- fi
- if test -x $path/sbin/apxs; then
- apxs_path=$path/sbin/apxs
- httpd_path=$path/sbin/httpd
- break
- fi
- done
- if test "x$apxs_path" = "xno"; then
- echo "$as_me:$LINENO: result: not found" >&5
-echo "${ECHO_T}not found" >&6
- else
- echo "$as_me:$LINENO: result: found $apxs_path" >&5
-echo "${ECHO_T}found $apxs_path" >&6
- echo "$as_me:$LINENO: checking for apache 1.3.x" >&5
-echo $ECHO_N "checking for apache 1.3.x... $ECHO_C" >&6
- apache_version="`$httpd_path -v | grep 'Server version' | sed -e 's/.*Apache\/\([0-9]*\.[0-9]*\.[0-9]*\).*/\1/'`"
- apache_major_version=`echo $apache_version | sed -e 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1/'`
- apache_minor_version=`echo $apache_version | sed -e 's/.*\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\2/'`
- if test "$apache_major_version" = "1" -a "$apache_minor_version" = "3"; then
- echo "$as_me:$LINENO: result: found $apache_version" >&5
-echo "${ECHO_T}found $apache_version" >&6
- APXS_PATH="$apxs_path"
- BUILD_WRAPPERS="$BUILD_WRAPPERS mod_ecs"
- else
- echo "$as_me:$LINENO: result: found $apache_version - disabling module build" >&5
-echo "${ECHO_T}found $apache_version - disabling module build" >&6
- fi
- fi
-fi
-
-cs_cv_python=yes
-# Check whether --enable-python or --disable-python was given.
-if test "${enable_python+set}" = set; then
- enableval="$enable_python"
- if test $enableval = no; then
- cs_cv_python=no;
- echo "$as_me:$LINENO: result: Disabling python module" >&5
-echo "${ECHO_T}Disabling python module" >&6
- fi
-fi;
-
-# Check whether --with-python or --without-python was given.
-if test "${with_python+set}" = set; then
- withval="$with_python"
- cs_cv_python_path="$withval"
-else
- cs_cv_python_path=no
-fi;
-
-if test $cs_cv_python = yes; then
- echo "$as_me:$LINENO: checking for python includes" >&5
-echo $ECHO_N "checking for python includes... $ECHO_C" >&6
- python_inc=no
- python_search_path="/neo/opt /usr/local /usr /c"
- python_versions="2.4 2.3 2.2 2.1 2.0 1.5 24 23 22 21 20 15"
- if test $cs_cv_python_path != "no" -a -x $cs_cv_python_path; then
- python_bin=$cs_cv_python_path
- vers=`$python_bin -c "import sys; print sys.version[:3]"`
- py_inst_dir=`$python_bin -c "import sys; print sys.exec_prefix"`
- python_inc=$py_inst_dir/include/python$vers
- python_lib="-L$py_inst_dir/lib/python$vers/config -lpython$vers"
- python_site=$py_inst_dir/lib/python$vers/site-packages
- else
- for vers in $python_versions; do
- for path in $python_search_path; do
- if test -x $path/bin/python$vers; then
- python_bin=$path/bin/python$vers
- fi
- if test -f $path/include/python$vers/Python.h; then
- python_inc=$path/include/python$vers
- python_lib="-L$path/lib/python$vers/config -lpython$vers"
- python_site=$path/lib/python$vers/site-packages
- break 2
- fi
- if test -f $path/python$vers/include/Python.h; then
- python_inc=$path/python$vers/include
- python_lib="-L$path/python$vers/libs -lpython$vers"
- python_site=$path/python$vers/Lib/site-packages
- break 2
- fi
- done
- done
- fi
- if test "x$python_inc" = "xno"; then
- echo "$as_me:$LINENO: result: not found" >&5
-echo "${ECHO_T}not found" >&6
- PYTHON=
- PYTHON_INC=
- PYTHON_LIB=
- PYTHON_SITE=
- else
- echo "$as_me:$LINENO: result: found $python_inc" >&5
-echo "${ECHO_T}found $python_inc" >&6
- PYTHON=$python_bin
- PYTHON_INC="-I$python_inc"
- PYTHON_LIB=$python_lib
- if test ! $?PYTHON_SITE; then
- PYTHON_SITE=$python_site
- fi
- BUILD_WRAPPERS="$BUILD_WRAPPERS python"
- fi
-fi
-
-cs_cv_perl=yes
-# Check whether --enable-perl or --disable-perl was given.
-if test "${enable_perl+set}" = set; then
- enableval="$enable_perl"
- if test $enableval = no; then
- cs_cv_perl=no;
- echo "$as_me:$LINENO: result: Disabling perl module" >&5
-echo "${ECHO_T}Disabling perl module" >&6
- fi
-fi;
-
-# Check whether --with-perl or --without-perl was given.
-if test "${with_perl+set}" = set; then
- withval="$with_perl"
- cs_cv_perl_path="$withval"
-else
- cs_cv_perl_path=no
-fi;
-
-if test $cs_cv_perl = yes; then
- echo "$as_me:$LINENO: checking for perl >= 5.006" >&5
-echo $ECHO_N "checking for perl >= 5.006... $ECHO_C" >&6
- perl_path=no
- perl_search_path="/neo/opt /usr/local /usr"
- if test $cs_cv_perl_path != "no" -a -x $cs_cv_perl_path; then
- perl_path=$cs_cv_perl_path
- else
- for path in $perl_search_path; do
- if test -x $path/bin/perl; then
- require_error=`$path/bin/perl -e 'require 5.006' 2>&1`
- if test "x$require_error" = "x"; then
- perl_path=$path/bin/perl
- break
- fi
- fi
- done
- fi
- if test "x$perl_path" = "xno"; then
- echo "$as_me:$LINENO: result: not found" >&5
-echo "${ECHO_T}not found" >&6
- PERL=
- else
- echo "$as_me:$LINENO: result: found $perl_path" >&5
-echo "${ECHO_T}found $perl_path" >&6
- PERL="$perl_path"
- BUILD_WRAPPERS="$BUILD_WRAPPERS perl"
- fi
-fi
-
-cs_cv_ruby=yes
-# Check whether --enable-ruby or --disable-ruby was given.
-if test "${enable_ruby+set}" = set; then
- enableval="$enable_ruby"
- if test $enableval = no; then
- cs_cv_ruby=no;
- echo "$as_me:$LINENO: result: Disabling ruby module" >&5
-echo "${ECHO_T}Disabling ruby module" >&6
- fi
-fi;
-
-# Check whether --with-ruby or --without-ruby was given.
-if test "${with_ruby+set}" = set; then
- withval="$with_ruby"
- cs_cv_ruby_path="$withval"
-else
- cs_cv_ruby_path=no
-fi;
-
-if test $cs_cv_ruby = yes; then
- echo "$as_me:$LINENO: checking for ruby" >&5
-echo $ECHO_N "checking for ruby... $ECHO_C" >&6
- ruby_path=no
- ruby_search_path="/neo/opt /usr/local /usr"
- if test $cs_cv_ruby_path != "no" -a -x $cs_cv_ruby_path; then
- ruby_path=$cs_cv_ruby_path
- else
- for path in $ruby_search_path; do
- if test -x $path/bin/ruby; then
- ruby_path=$path/bin/ruby
- break
- fi
- done
- fi
- if test "x$ruby_path" = "xno"; then
- echo "$as_me:$LINENO: result: not found" >&5
-echo "${ECHO_T}not found" >&6
- RUBY=
- else
- echo "$as_me:$LINENO: result: found $ruby_path" >&5
-echo "${ECHO_T}found $ruby_path" >&6
- RUBY="$ruby_path"
- BUILD_WRAPPERS="$BUILD_WRAPPERS ruby"
- fi
-fi
-
-cs_cv_java=yes
-# Check whether --enable-java or --disable-java was given.
-if test "${enable_java+set}" = set; then
- enableval="$enable_java"
- if test $enableval = no; then
- cs_cv_java=no;
- echo "$as_me:$LINENO: result: Disabling java module" >&5
-echo "${ECHO_T}Disabling java module" >&6
- fi
-fi;
-
-# Check whether --with-java or --without-java was given.
-if test "${with_java+set}" = set; then
- withval="$with_java"
- cs_cv_java_path="$withval"
-else
- cs_cv_java_path=no
-fi;
-
-if test $cs_cv_java = yes; then
- echo "$as_me:$LINENO: checking for j2sdk path" >&5
-echo $ECHO_N "checking for j2sdk path... $ECHO_C" >&6
- java_path=no
- if test $cs_cv_java_path != "no" -a -d $cs_cv_java_path; then
- java_path=$cs_cv_java_path
- else
- java_search_path="/neo/opt /usr/local /usr"
- for path in $java_search_path; do
- if test -d $path/java/j2sdk; then
- java_path=$path/java/j2sdk
- break
- fi
- if test -d $path/j2sdk; then
- java_path=$path/j2sdk
- break
- fi
- possible="$path/java/j2sdk*"
- for pos_path in $possible; do
- if test -d $pos_path; then
- java_path=$pos_path
- break 2
- fi
- done
- possible="$path/j2sdk*"
- for pos_path in $possible; do
- if test -d $pos_path; then
- java_path=$pos_path
- break 2
- fi
- done
- done
- fi
- if test "x$java_path" = "xno"; then
- echo "$as_me:$LINENO: result: not found" >&5
-echo "${ECHO_T}not found" >&6
- JAVA_PATH=
- JAVA_INCLUDE_PATH=
- else
- echo "$as_me:$LINENO: result: found $java_path" >&5
-echo "${ECHO_T}found $java_path" >&6
- JAVA_PATH="$java_path"
- JAVAC="$java_path/bin/javac"
- _ACJNI_JAVAC=$JAVAC
-
-
-JNI_INCLUDE_DIRS=""
-
-test "x$JAVAC" = x && { { echo "$as_me:$LINENO: error: '$JAVAC' undefined" >&5
-echo "$as_me: error: '$JAVAC' undefined" >&2;}
- { (exit 1); exit 1; }; }
-# Extract the first word of "$JAVAC", so it can be a program name with args.
-set dummy $JAVAC; 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_path__ACJNI_JAVAC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- case $_ACJNI_JAVAC in
- [\\/]* | ?:[\\/]*)
- ac_cv_path__ACJNI_JAVAC="$_ACJNI_JAVAC" # Let the user override the test with a path.
- ;;
- *)
- 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_path__ACJNI_JAVAC="$as_dir/$ac_word$ac_exec_ext"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
- test -z "$ac_cv_path__ACJNI_JAVAC" && ac_cv_path__ACJNI_JAVAC="no"
- ;;
-esac
-fi
-_ACJNI_JAVAC=$ac_cv_path__ACJNI_JAVAC
-
-if test -n "$_ACJNI_JAVAC"; then
- echo "$as_me:$LINENO: result: $_ACJNI_JAVAC" >&5
-echo "${ECHO_T}$_ACJNI_JAVAC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-test "x$_ACJNI_JAVAC" = xno && { { echo "$as_me:$LINENO: error: $JAVAC could not be found in path" >&5
-echo "$as_me: error: $JAVAC could not be found in path" >&2;}
- { (exit 1); exit 1; }; }
-
-
-# find the include directory relative to the javac executable
-_cur=""$_ACJNI_JAVAC""
-while ls -ld "$_cur" 2>/dev/null | grep " -> " >/dev/null; do
- echo "$as_me:$LINENO: checking symlink for $_cur" >&5
-echo $ECHO_N "checking symlink for $_cur... $ECHO_C" >&6
- _slink=`ls -ld "$_cur" | sed 's/.* -> //'`
- case "$_slink" in
- /*) _cur="$_slink";;
- # 'X' avoids triggering unwanted echo options.
- *) _cur=`echo "X$_cur" | sed -e 's/^X//' -e 's:[^/]*$::'`"$_slink";;
- esac
- echo "$as_me:$LINENO: result: $_cur" >&5
-echo "${ECHO_T}$_cur" >&6
-done
-_ACJNI_FOLLOWED="$_cur"
-
-_JTOPDIR=`echo "$_ACJNI_FOLLOWED" | sed -e 's://*:/:g' -e 's:/[^/]*$::'`
-case "$host_os" in
- darwin*) _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[^/]*$::'`
- _JINC="$_JTOPDIR/Headers";;
- *) _JINC="$_JTOPDIR/include";;
-esac
-if test -f "$_JINC/jni.h"; then
- JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JINC"
-else
- _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[^/]*$::'`
- if test -f "$_JTOPDIR/include/jni.h"; then
- JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include"
- else
- { { echo "$as_me:$LINENO: error: cannot find java include files" >&5
-echo "$as_me: error: cannot find java include files" >&2;}
- { (exit 1); exit 1; }; }
- fi
-fi
-
-# get the likely subdirectories for system specific java includes
-case "$host_os" in
-bsdi*) _JNI_INC_SUBDIRS="bsdos";;
-linux*) _JNI_INC_SUBDIRS="linux genunix";;
-osf*) _JNI_INC_SUBDIRS="alpha";;
-solaris*) _JNI_INC_SUBDIRS="solaris";;
-mingw*) _JNI_INC_SUBDIRS="win32";;
-cygwin*) _JNI_INC_SUBDIRS="win32";;
-*) _JNI_INC_SUBDIRS="genunix";;
-esac
-
-# add any subdirectories that are present
-for JINCSUBDIR in $_JNI_INC_SUBDIRS
-do
- if test -d "$_JTOPDIR/include/$JINCSUBDIR"; then
- JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include/$JINCSUBDIR"
- fi
-done
-
- for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS
- do
- JAVA_INCLUDE_PATH="$JAVA_INCLUDE_PATH -I$JNI_INCLUDE_DIR"
- done
- BUILD_WRAPPERS="$BUILD_WRAPPERS java-jni"
- fi
-fi
-
-cs_cv_csharp=yes
-# Check whether --enable-csharp or --disable-csharp was given.
-if test "${enable_csharp+set}" = set; then
- enableval="$enable_csharp"
- if test $enableval = no; then
- cs_cv_csharp=no;
- echo "$as_me:$LINENO: result: Disabling csharp module" >&5
-echo "${ECHO_T}Disabling csharp module" >&6
- fi
-fi;
-
-# Check whether --with-csharp or --without-csharp was given.
-if test "${with_csharp+set}" = set; then
- withval="$with_csharp"
- cs_cv_csharp_path="$withval"
-else
- cs_cv_csharp_path=no
-fi;
-if test $cs_cv_csharp = yes; then
- echo "$as_me:$LINENO: checking for csharp path" >&5
-echo $ECHO_N "checking for csharp path... $ECHO_C" >&6
- csharp_path=no
- if test $cs_cv_csharp_path != "no" -a -d $cs_cv_csharp_path; then
- csharp_path=$cs_cv_csharp_path
- else
- csharp_search_path="/neo/opt /usr/local /usr"
- for path in $csharp_search_path; do
- if test -f $path/bin/mcs; then
- csharp_path=$path
- break
- fi
- done
- fi
- if test "x$csharp_path" = "xno"; then
- echo "$as_me:$LINENO: result: not found" >&5
-echo "${ECHO_T}not found" >&6
- CSHARP_PATH=
- else
- echo "$as_me:$LINENO: result: found $csharp_path/bin/mcs" >&5
-echo "${ECHO_T}found $csharp_path/bin/mcs" >&6
- CSHARP_PATH="$csharp_path"
- BUILD_WRAPPERS="$BUILD_WRAPPERS dso csharp"
- fi
-fi
-
-# Check whether --enable-gettext or --disable-gettext was given.
-if test "${enable_gettext+set}" = set; then
- enableval="$enable_gettext"
- if test $enableval = yes; then
- echo "$as_me:$LINENO: checking for gettext" >&5
-echo $ECHO_N "checking for gettext... $ECHO_C" >&6
-if test "${ac_cv_func_gettext+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char gettext (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-/* 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 gettext ();
-/* 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_gettext) || defined (__stub___gettext)
-choke me
-#else
-char (*f) () = gettext;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != gettext;
- ;
- 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_func_gettext=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_gettext=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_gettext" >&5
-echo "${ECHO_T}$ac_cv_func_gettext" >&6
-if test $ac_cv_func_gettext = yes; then
-
- cs_cv_libintl=no
- if test "${ac_cv_header_libintl_h+set}" = set; then
- echo "$as_me:$LINENO: checking for libintl.h" >&5
-echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6
-if test "${ac_cv_header_libintl_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5
-echo "${ECHO_T}$ac_cv_header_libintl_h" >&6
-else
- # Is the header compilable?
-echo "$as_me:$LINENO: checking libintl.h usability" >&5
-echo $ECHO_N "checking libintl.h usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-@%:@include <libintl.h>
-_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
-sed 's/^/| /' 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 libintl.h presence" >&5
-echo $ECHO_N "checking libintl.h presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-@%:@include <libintl.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=$?
- grep -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
-sed 's/^/| /' 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: libintl.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: libintl.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: libintl.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: libintl.h: proceeding with the preprocessor's result" >&2;}
- (
- cat <<\_ASBOX
-@%:@@%:@ ------------------------------------ @%:@@%:@
-@%:@@%:@ Report this to bug-autoconf@gnu.org. @%:@@%:@
-@%:@@%:@ ------------------------------------ @%:@@%:@
-_ASBOX
- ) |
- sed "s/^/$as_me: WARNING: /" >&2
- ;;
- no:yes )
- { echo "$as_me:$LINENO: WARNING: libintl.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: libintl.h: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: libintl.h: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: libintl.h: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: libintl.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: libintl.h: proceeding with the preprocessor's result" >&2;}
- (
- cat <<\_ASBOX
-@%:@@%:@ ------------------------------------ @%:@@%:@
-@%:@@%:@ Report this to bug-autoconf@gnu.org. @%:@@%:@
-@%:@@%:@ ------------------------------------ @%:@@%:@
-_ASBOX
- ) |
- sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-echo "$as_me:$LINENO: checking for libintl.h" >&5
-echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6
-if test "${ac_cv_header_libintl_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_header_libintl_h=$ac_header_preproc
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5
-echo "${ECHO_T}$ac_cv_header_libintl_h" >&6
-
-fi
-if test $ac_cv_header_libintl_h = yes; then
- cs_cv_libintl=yes
-fi
-
-
- if test $cs_cv_libintl = yes; then
- cat >>confdefs.h <<\_ACEOF
-@%:@define ENABLE_GETTEXT 1
-_ACEOF
-
- echo "$as_me:$LINENO: result: Enabling gettext message translation" >&5
-echo "${ECHO_T}Enabling gettext message translation" >&6
- else
- echo "$as_me:$LINENO: result: not found" >&5
-echo "${ECHO_T}not found" >&6
- fi
-
-fi
-
- fi
-fi;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ac_config_files="$ac_config_files rules.mk"
-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 overridden 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 diff $cache_file confcache >/dev/null 2>&1; 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
-
-ac_libobjs=
-ac_ltlibobjs=
-for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_i=`echo "$ac_i" |
- sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
- # 2. Add them.
- ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
- ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
-done
-LIB@&t@OBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: ${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
-ac_cs_recheck=false
-ac_cs_silent=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=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
- set -o posix
-fi
-
-# Support unset when possible.
-if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
- LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
- LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
- LC_TELEPHONE LC_TIME
-do
- if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
- eval $as_var=C; export $as_var
- else
- $as_unset $as_var
- fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename "$0" ||
-$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" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.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
- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
- 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
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
-else
- as_mkdir_p=false
-fi
-
-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
-
-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.57. 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
- -q, --quiet do not print progress messages
- -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.57,
- 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[^=]*=\(.*\)'`
- ac_shift=:
- ;;
- -*)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- *) # This is not an option, so the user has probably given explicit
- # arguments.
- ac_option=$1
- ac_need_defaults=false;;
- esac
-
- case $ac_option in
- # Handling of the options.
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --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 )
- $ac_shift
- CONFIG_FILES="$CONFIG_FILES $ac_optarg"
- ac_need_defaults=false;;
- --header | --heade | --head | --hea )
- $ac_shift
- CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
- ac_need_defaults=false;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # 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
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
- exec 6>/dev/null
- ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-if \$ac_cs_recheck; then
- echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
- exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-fi
-
-_ACEOF
-
-
-
-
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_config_target in $ac_config_targets
-do
- case "$ac_config_target" in
- # Handling of arguments.
- "rules.mk" ) CONFIG_FILES="$CONFIG_FILES rules.mk" ;;
- "cs_config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS cs_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
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason to put it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# 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.
-
-{
- tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
- test -n "$tmp" && test -d "$tmp"
-} ||
-{
- tmp=./confstat$$-$RANDOM
- (umask 077 && mkdir $tmp)
-} ||
-{
- echo "$me: cannot create a temporary directory in ." >&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,@CPP@,$CPP,;t t
-s,@LN_S@,$LN_S,;t t
-s,@AR@,$AR,;t t
-s,@RANLIB@,$RANLIB,;t t
-s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
-s,@SET_MAKE@,$SET_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,@EGREP@,$EGREP,;t t
-s,@build@,$build,;t t
-s,@build_cpu@,$build_cpu,;t t
-s,@build_vendor@,$build_vendor,;t t
-s,@build_os@,$build_os,;t t
-s,@host@,$host,;t t
-s,@host_cpu@,$host_cpu,;t t
-s,@host_vendor@,$host_vendor,;t t
-s,@host_os@,$host_os,;t t
-s,@_ACJNI_JAVAC@,$_ACJNI_JAVAC,;t t
-s,@USE_MINGW32@,$USE_MINGW32,;t t
-s,@APXS_PATH@,$APXS_PATH,;t t
-s,@PERL@,$PERL,;t t
-s,@RUBY@,$RUBY,;t t
-s,@BUILD_WRAPPERS@,$BUILD_WRAPPERS,;t t
-s,@JAVA_PATH@,$JAVA_PATH,;t t
-s,@JAVA_INCLUDE_PATH@,$JAVA_INCLUDE_PATH,;t t
-s,@PYTHON@,$PYTHON,;t t
-s,@PYTHON_INC@,$PYTHON_INC,;t t
-s,@PYTHON_LIB@,$PYTHON_LIB,;t t
-s,@PYTHON_SITE@,$PYTHON_SITE,;t t
-s,@EXTRA_UTL_SRC@,$EXTRA_UTL_SRC,;t t
-s,@EXTRA_UTL_OBJS@,$EXTRA_UTL_OBJS,;t t
-s,@CSHARP_PATH@,$CSHARP_PATH,;t t
-s,@LIB@&t@OBJS@,$LIB@&t@OBJS,;t t
-s,@LTLIBOBJS@,$LTLIBOBJS,;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'`
- { if $as_mkdir_p; then
- mkdir -p "$ac_dir"
- else
- as_dir="$ac_dir"
- as_dirs=
- while test ! -d "$as_dir"; do
- as_dirs="$as_dir $as_dirs"
- as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- done
- test ! -n "$as_dirs" || mkdir $as_dirs
- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
- { (exit 1); exit 1; }; }; }
-
- 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 grep "^[ ]*#[ ]*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 # grep' >>$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 diff $ac_file $tmp/config.h >/dev/null 2>&1; 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'`
- { if $as_mkdir_p; then
- mkdir -p "$ac_dir"
- else
- as_dir="$ac_dir"
- as_dirs=
- while test ! -d "$as_dir"; do
- as_dirs="$as_dir $as_dirs"
- as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- done
- test ! -n "$as_dirs" || mkdir $as_dirs
- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
- { (exit 1); exit 1; }; }; }
-
- 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=:
- ac_config_status_args=
- test "$silent" = yes &&
- ac_config_status_args="$ac_config_status_args --quiet"
- exec 5>/dev/null
- $SHELL $CONFIG_STATUS $ac_config_status_args || 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
-
diff --git a/autom4te.cache/requests b/autom4te.cache/requests
deleted file mode 100644
index 6309741..0000000
--- a/autom4te.cache/requests
+++ /dev/null
@@ -1,111 +0,0 @@
-# This file was created by autom4te.
-# It contains the lists of macros which have been traced.
-# It can be safely removed.
-
-@request = (
- bless( [
- '0',
- 1,
- [
- '/usr/share/autoconf'
- ],
- [
- '/usr/share/autoconf/autoconf/autoconf.m4f',
- 'aclocal.m4',
- 'configure.in'
- ],
- {
- 'm4_pattern_forbid' => 1,
- 'AC_C_VOLATILE' => 1,
- 'AC_TYPE_OFF_T' => 1,
- 'AC_FUNC_CLOSEDIR_VOID' => 1,
- 'AC_REPLACE_FNMATCH' => 1,
- 'AC_PROG_LIBTOOL' => 1,
- 'AC_FUNC_STAT' => 1,
- 'AC_FUNC_WAIT3' => 1,
- 'AC_HEADER_TIME' => 1,
- 'AC_FUNC_LSTAT' => 1,
- 'AC_STRUCT_TM' => 1,
- 'AM_AUTOMAKE_VERSION' => 1,
- 'AC_FUNC_GETMNTENT' => 1,
- 'AC_TYPE_MODE_T' => 1,
- 'AC_FUNC_STRTOD' => 1,
- 'AC_CHECK_HEADERS' => 1,
- 'AC_FUNC_STRNLEN' => 1,
- 'AC_PROG_CXX' => 1,
- 'AC_PATH_X' => 1,
- 'AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK' => 1,
- 'AC_PROG_AWK' => 1,
- 'AC_HEADER_STDC' => 1,
- 'AC_HEADER_MAJOR' => 1,
- 'AC_FUNC_ERROR_AT_LINE' => 1,
- 'AC_PROG_GCC_TRADITIONAL' => 1,
- 'AC_LIBSOURCE' => 1,
- 'AC_FUNC_MBRTOWC' => 1,
- 'AC_STRUCT_ST_BLOCKS' => 1,
- 'AC_TYPE_SIGNAL' => 1,
- 'AC_TYPE_UID_T' => 1,
- 'AC_CONFIG_AUX_DIR' => 1,
- 'AC_PROG_MAKE_SET' => 1,
- 'm4_pattern_allow' => 1,
- 'AC_DEFINE_TRACE_LITERAL' => 1,
- 'AC_FUNC_STRERROR_R' => 1,
- 'AC_PROG_CC' => 1,
- 'AC_FUNC_FORK' => 1,
- 'AC_DECL_SYS_SIGLIST' => 1,
- 'AC_FUNC_STRCOLL' => 1,
- 'AC_FUNC_VPRINTF' => 1,
- 'AC_PROG_YACC' => 1,
- 'AC_INIT' => 1,
- 'AC_STRUCT_TIMEZONE' => 1,
- 'AC_FUNC_CHOWN' => 1,
- 'AC_SUBST' => 1,
- 'AC_FUNC_ALLOCA' => 1,
- 'AC_CANONICAL_HOST' => 1,
- 'AC_FUNC_GETPGRP' => 1,
- 'AC_PROG_RANLIB' => 1,
- 'AM_INIT_AUTOMAKE' => 1,
- 'AC_FUNC_SETPGRP' => 1,
- 'AC_CONFIG_SUBDIRS' => 1,
- 'AC_FUNC_MMAP' => 1,
- 'AC_FUNC_REALLOC' => 1,
- 'AC_TYPE_SIZE_T' => 1,
- 'AC_CHECK_TYPES' => 1,
- 'AC_CHECK_MEMBERS' => 1,
- 'AM_MAINTAINER_MODE' => 1,
- 'AC_FUNC_UTIME_NULL' => 1,
- 'AC_FUNC_SELECT_ARGTYPES' => 1,
- 'AC_FUNC_STRFTIME' => 1,
- 'AC_HEADER_STAT' => 1,
- 'AC_C_INLINE' => 1,
- 'AC_PROG_CPP' => 1,
- 'AC_PROG_LEX' => 1,
- 'AC_C_CONST' => 1,
- 'AC_TYPE_PID_T' => 1,
- 'AC_CONFIG_FILES' => 1,
- 'include' => 1,
- 'AC_FUNC_SETVBUF_REVERSED' => 1,
- 'AC_PROG_INSTALL' => 1,
- 'AM_GNU_GETTEXT' => 1,
- 'AC_CHECK_LIB' => 1,
- 'AC_FUNC_OBSTACK' => 1,
- 'AC_FUNC_MALLOC' => 1,
- 'AC_FUNC_GETGROUPS' => 1,
- 'AC_FUNC_GETLOADAVG' => 1,
- 'AH_OUTPUT' => 1,
- 'AC_FUNC_FSEEKO' => 1,
- 'AM_PROG_CC_C_O' => 1,
- 'AC_FUNC_MKTIME' => 1,
- 'AC_CANONICAL_SYSTEM' => 1,
- 'AM_CONDITIONAL' => 1,
- 'AC_CONFIG_HEADERS' => 1,
- 'AC_HEADER_SYS_WAIT' => 1,
- 'AC_PROG_LN_S' => 1,
- 'AC_FUNC_MEMCMP' => 1,
- 'm4_include' => 1,
- 'AC_HEADER_DIRENT' => 1,
- 'AC_CHECK_FUNCS' => 1
- }
- ], 'Request' )
- );
-
diff --git a/autom4te.cache/traces.0 b/autom4te.cache/traces.0
deleted file mode 100644
index f679793..0000000
--- a/autom4te.cache/traces.0
+++ /dev/null
@@ -1,333 +0,0 @@
-m4trace:configure.in:2: -1- AC_INIT([cgi/cgi.c])
-m4trace:configure.in:2: -1- m4_pattern_forbid([^_?A[CHUM]_])
-m4trace:configure.in:2: -1- m4_pattern_forbid([_AC_])
-m4trace:configure.in:2: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
-m4trace:configure.in:2: -1- m4_pattern_allow([^AS_FLAGS$])
-m4trace:configure.in:2: -1- m4_pattern_forbid([^_?m4_])
-m4trace:configure.in:2: -1- m4_pattern_forbid([^dnl$])
-m4trace:configure.in:2: -1- m4_pattern_forbid([^_?AS_])
-m4trace:configure.in:2: -1- AC_SUBST([SHELL], [${CONFIG_SHELL-/bin/sh}])
-m4trace:configure.in:2: -1- AC_SUBST([PATH_SEPARATOR])
-m4trace:configure.in:2: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])])
-m4trace:configure.in:2: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])])
-m4trace:configure.in:2: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])])
-m4trace:configure.in:2: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])])
-m4trace:configure.in:2: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])])
-m4trace:configure.in:2: -1- AC_SUBST([exec_prefix], [NONE])
-m4trace:configure.in:2: -1- AC_SUBST([prefix], [NONE])
-m4trace:configure.in:2: -1- AC_SUBST([program_transform_name], [s,x,x,])
-m4trace:configure.in:2: -1- AC_SUBST([bindir], ['${exec_prefix}/bin'])
-m4trace:configure.in:2: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin'])
-m4trace:configure.in:2: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec'])
-m4trace:configure.in:2: -1- AC_SUBST([datadir], ['${prefix}/share'])
-m4trace:configure.in:2: -1- AC_SUBST([sysconfdir], ['${prefix}/etc'])
-m4trace:configure.in:2: -1- AC_SUBST([sharedstatedir], ['${prefix}/com'])
-m4trace:configure.in:2: -1- AC_SUBST([localstatedir], ['${prefix}/var'])
-m4trace:configure.in:2: -1- AC_SUBST([libdir], ['${exec_prefix}/lib'])
-m4trace:configure.in:2: -1- AC_SUBST([includedir], ['${prefix}/include'])
-m4trace:configure.in:2: -1- AC_SUBST([oldincludedir], ['/usr/include'])
-m4trace:configure.in:2: -1- AC_SUBST([infodir], ['${prefix}/info'])
-m4trace:configure.in:2: -1- AC_SUBST([mandir], ['${prefix}/man'])
-m4trace:configure.in:2: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME])
-m4trace:configure.in:2: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */
-#undef PACKAGE_NAME])
-m4trace:configure.in:2: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME])
-m4trace:configure.in:2: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME])
-m4trace:configure.in:2: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION])
-m4trace:configure.in:2: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */
-#undef PACKAGE_VERSION])
-m4trace:configure.in:2: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING])
-m4trace:configure.in:2: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING])
-m4trace:configure.in:2: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT])
-m4trace:configure.in:2: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT])
-m4trace:configure.in:2: -1- AC_SUBST([build_alias])
-m4trace:configure.in:2: -1- AC_SUBST([host_alias])
-m4trace:configure.in:2: -1- AC_SUBST([target_alias])
-m4trace:configure.in:2: -1- AC_SUBST([DEFS])
-m4trace:configure.in:2: -1- AC_SUBST([ECHO_C])
-m4trace:configure.in:2: -1- AC_SUBST([ECHO_N])
-m4trace:configure.in:2: -1- AC_SUBST([ECHO_T])
-m4trace:configure.in:2: -1- AC_SUBST([LIBS])
-m4trace:configure.in:3: -1- AC_CONFIG_HEADERS([cs_config.h])
-m4trace:configure.in:6: -1- AC_PROG_CC
-m4trace:configure.in:6: -1- AC_SUBST([CC])
-m4trace:configure.in:6: -1- AC_SUBST([CFLAGS])
-m4trace:configure.in:6: -1- AC_SUBST([LDFLAGS])
-m4trace:configure.in:6: -1- AC_SUBST([CPPFLAGS])
-m4trace:configure.in:6: -1- AC_SUBST([CC])
-m4trace:configure.in:6: -1- AC_SUBST([ac_ct_CC])
-m4trace:configure.in:6: -1- AC_SUBST([CC])
-m4trace:configure.in:6: -1- AC_SUBST([ac_ct_CC])
-m4trace:configure.in:6: -1- AC_SUBST([CC])
-m4trace:configure.in:6: -1- AC_SUBST([CC])
-m4trace:configure.in:6: -1- AC_SUBST([ac_ct_CC])
-m4trace:configure.in:6: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext])
-m4trace:configure.in:6: -1- AC_SUBST([OBJEXT], [$ac_cv_objext])
-m4trace:configure.in:7: -1- AC_PROG_CPP
-m4trace:configure.in:7: -1- AC_SUBST([CPP])
-m4trace:configure.in:7: -1- AC_SUBST([CPPFLAGS])
-m4trace:configure.in:7: -1- AC_SUBST([CPP])
-m4trace:configure.in:8: -1- AC_PROG_LN_S
-m4trace:configure.in:8: -1- AC_SUBST([LN_S], [$as_ln_s])
-m4trace:configure.in:9: -1- AC_SUBST([AR])
-m4trace:configure.in:10: -1- AC_PROG_RANLIB
-m4trace:configure.in:10: -1- AC_SUBST([RANLIB])
-m4trace:configure.in:10: -1- AC_SUBST([ac_ct_RANLIB])
-m4trace:configure.in:12: -1- AC_PROG_MAKE_SET
-m4trace:configure.in:12: -1- AC_SUBST([SET_MAKE])
-m4trace:configure.in:13: -1- AC_PROG_INSTALL
-m4trace:configure.in:13: -1- AC_SUBST([INSTALL_PROGRAM])
-m4trace:configure.in:13: -1- AC_SUBST([INSTALL_SCRIPT])
-m4trace:configure.in:13: -1- AC_SUBST([INSTALL_DATA])
-m4trace:configure.in:26: -1- AC_HEADER_DIRENT
-m4trace:configure.in:26: -1- AH_OUTPUT([HAVE_DIRENT_H], [/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR\'.
- */
-#undef HAVE_DIRENT_H])
-m4trace:configure.in:26: -1- AH_OUTPUT([HAVE_SYS_NDIR_H], [/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR\'.
- */
-#undef HAVE_SYS_NDIR_H])
-m4trace:configure.in:26: -1- AH_OUTPUT([HAVE_SYS_DIR_H], [/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR\'.
- */
-#undef HAVE_SYS_DIR_H])
-m4trace:configure.in:26: -1- AH_OUTPUT([HAVE_NDIR_H], [/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR\'. */
-#undef HAVE_NDIR_H])
-m4trace:configure.in:27: -1- AC_HEADER_STDC
-m4trace:configure.in:27: -1- AC_SUBST([EGREP])
-m4trace:configure.in:27: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS])
-m4trace:configure.in:27: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS])
-m4trace:configure.in:28: -1- AC_HEADER_SYS_WAIT
-m4trace:configure.in:28: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SYS_WAIT_H])
-m4trace:configure.in:28: -1- AH_OUTPUT([HAVE_SYS_WAIT_H], [/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
-#undef HAVE_SYS_WAIT_H])
-m4trace:configure.in:29: -1- AC_CHECK_HEADERS([fcntl.h stdarg.h varargs.h limits.h strings.h sys/ioctl.h sys/time.h unistd.h])
-m4trace:configure.in:29: -1- AH_OUTPUT([HAVE_FCNTL_H], [/* Define to 1 if you have the <fcntl.h> header file. */
-#undef HAVE_FCNTL_H])
-m4trace:configure.in:29: -1- AH_OUTPUT([HAVE_STDARG_H], [/* Define to 1 if you have the <stdarg.h> header file. */
-#undef HAVE_STDARG_H])
-m4trace:configure.in:29: -1- AH_OUTPUT([HAVE_VARARGS_H], [/* Define to 1 if you have the <varargs.h> header file. */
-#undef HAVE_VARARGS_H])
-m4trace:configure.in:29: -1- AH_OUTPUT([HAVE_LIMITS_H], [/* Define to 1 if you have the <limits.h> header file. */
-#undef HAVE_LIMITS_H])
-m4trace:configure.in:29: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H])
-m4trace:configure.in:29: -1- AH_OUTPUT([HAVE_SYS_IOCTL_H], [/* Define to 1 if you have the <sys/ioctl.h> header file. */
-#undef HAVE_SYS_IOCTL_H])
-m4trace:configure.in:29: -1- AH_OUTPUT([HAVE_SYS_TIME_H], [/* Define to 1 if you have the <sys/time.h> header file. */
-#undef HAVE_SYS_TIME_H])
-m4trace:configure.in:29: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H])
-m4trace:configure.in:29: -1- AC_CHECK_HEADERS([sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h], [], [], [$ac_includes_default])
-m4trace:configure.in:29: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H])
-m4trace:configure.in:29: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H])
-m4trace:configure.in:29: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H])
-m4trace:configure.in:29: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H])
-m4trace:configure.in:29: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H])
-m4trace:configure.in:29: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H])
-m4trace:configure.in:29: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H])
-m4trace:configure.in:29: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H])
-m4trace:configure.in:29: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H])
-m4trace:configure.in:32: -1- AC_C_CONST
-m4trace:configure.in:32: -1- AC_DEFINE_TRACE_LITERAL([const])
-m4trace:configure.in:32: -1- AH_OUTPUT([const], [/* Define to empty if `const\' does not conform to ANSI C. */
-#undef const])
-m4trace:configure.in:33: -1- AC_TYPE_MODE_T
-m4trace:configure.in:33: -1- AC_DEFINE_TRACE_LITERAL([mode_t])
-m4trace:configure.in:33: -1- AH_OUTPUT([mode_t], [/* Define to `int\' if <sys/types.h> does not define. */
-#undef mode_t])
-m4trace:configure.in:34: -1- AC_TYPE_OFF_T
-m4trace:configure.in:34: -1- AC_DEFINE_TRACE_LITERAL([off_t])
-m4trace:configure.in:34: -1- AH_OUTPUT([off_t], [/* Define to `long\' if <sys/types.h> does not define. */
-#undef off_t])
-m4trace:configure.in:35: -1- AC_TYPE_PID_T
-m4trace:configure.in:35: -1- AC_DEFINE_TRACE_LITERAL([pid_t])
-m4trace:configure.in:35: -1- AH_OUTPUT([pid_t], [/* Define to `int\' if <sys/types.h> does not define. */
-#undef pid_t])
-m4trace:configure.in:36: -1- AC_TYPE_SIZE_T
-m4trace:configure.in:36: -1- AC_DEFINE_TRACE_LITERAL([size_t])
-m4trace:configure.in:36: -1- AH_OUTPUT([size_t], [/* Define to `unsigned\' if <sys/types.h> does not define. */
-#undef size_t])
-m4trace:configure.in:37: -1- AC_HEADER_TIME
-m4trace:configure.in:37: -1- AC_DEFINE_TRACE_LITERAL([TIME_WITH_SYS_TIME])
-m4trace:configure.in:37: -1- AH_OUTPUT([TIME_WITH_SYS_TIME], [/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#undef TIME_WITH_SYS_TIME])
-m4trace:configure.in:38: -1- AC_STRUCT_TM
-m4trace:configure.in:38: -1- AC_DEFINE_TRACE_LITERAL([TM_IN_SYS_TIME])
-m4trace:configure.in:38: -1- AH_OUTPUT([TM_IN_SYS_TIME], [/* Define to 1 if your <sys/time.h> declares `struct tm\'. */
-#undef TM_IN_SYS_TIME])
-m4trace:configure.in:39: -1- AC_STRUCT_TIMEZONE
-m4trace:configure.in:39: -1- AC_CHECK_MEMBERS([struct tm.tm_zone], [], [], [#include <sys/types.h>
-#include <$ac_cv_struct_tm>
-])
-m4trace:configure.in:39: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_TM_TM_ZONE])
-m4trace:configure.in:39: -1- AH_OUTPUT([HAVE_STRUCT_TM_TM_ZONE], [/* Define to 1 if `tm_zone\' is member of `struct tm\'. */
-#undef HAVE_STRUCT_TM_TM_ZONE])
-m4trace:configure.in:39: -1- AC_DEFINE_TRACE_LITERAL([HAVE_TM_ZONE])
-m4trace:configure.in:39: -1- AH_OUTPUT([HAVE_TM_ZONE], [/* Define to 1 if your `struct tm\' has `tm_zone\'. Deprecated, use
- `HAVE_STRUCT_TM_TM_ZONE\' instead. */
-#undef HAVE_TM_ZONE])
-m4trace:configure.in:39: -1- AC_DEFINE_TRACE_LITERAL([HAVE_TZNAME])
-m4trace:configure.in:39: -1- AH_OUTPUT([HAVE_TZNAME], [/* Define to 1 if you don\'t have `tm_zone\' but do have the external array
- `tzname\'. */
-#undef HAVE_TZNAME])
-m4trace:configure.in:42: -1- AC_TYPE_SIGNAL
-m4trace:configure.in:42: -1- AC_DEFINE_TRACE_LITERAL([RETSIGTYPE])
-m4trace:configure.in:42: -1- AH_OUTPUT([RETSIGTYPE], [/* Define as the return type of signal handlers (`int\' or `void\'). */
-#undef RETSIGTYPE])
-m4trace:configure.in:43: -1- AC_FUNC_STRFTIME
-m4trace:configure.in:43: -1- AC_CHECK_FUNCS([strftime], [], [# strftime is in -lintl on SCO UNIX.
-AC_CHECK_LIB(intl, strftime,
- [AC_DEFINE(HAVE_STRFTIME)
-LIBS="-lintl $LIBS"])])
-m4trace:configure.in:43: -1- AH_OUTPUT([HAVE_STRFTIME], [/* Define to 1 if you have the `strftime\' function. */
-#undef HAVE_STRFTIME])
-m4trace:configure.in:43: -1- AC_CHECK_LIB([intl], [strftime], [AC_DEFINE(HAVE_STRFTIME)
-LIBS="-lintl $LIBS"])
-m4trace:configure.in:43: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRFTIME])
-m4trace:configure.in:44: -1- AC_FUNC_VPRINTF
-m4trace:configure.in:44: -1- AC_CHECK_FUNCS([vprintf], [
-AC_CHECK_FUNC(_doprnt,
- [AC_DEFINE(HAVE_DOPRNT, 1,
- [Define to 1 if you don't have `vprintf' but do have
- `_doprnt.'])])])
-m4trace:configure.in:44: -1- AH_OUTPUT([HAVE_VPRINTF], [/* Define to 1 if you have the `vprintf\' function. */
-#undef HAVE_VPRINTF])
-m4trace:configure.in:44: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DOPRNT])
-m4trace:configure.in:44: -1- AH_OUTPUT([HAVE_DOPRNT], [/* Define to 1 if you don\'t have `vprintf\' but do have `_doprnt.\' */
-#undef HAVE_DOPRNT])
-m4trace:configure.in:45: -1- AC_FUNC_WAIT3
-m4trace:configure.in:45: -1- AC_DEFINE_TRACE_LITERAL([HAVE_WAIT3])
-m4trace:configure.in:45: -1- AH_OUTPUT([HAVE_WAIT3], [/* Define to 1 if you have the `wait3\' system call. Deprecated, you should no
- longer depend upon `wait3\'. */
-#undef HAVE_WAIT3])
-m4trace:configure.in:46: -1- AC_CHECK_FUNCS([gettimeofday mktime putenv strerror strspn strtod strtol strtoul])
-m4trace:configure.in:46: -1- AH_OUTPUT([HAVE_GETTIMEOFDAY], [/* Define to 1 if you have the `gettimeofday\' function. */
-#undef HAVE_GETTIMEOFDAY])
-m4trace:configure.in:46: -1- AH_OUTPUT([HAVE_MKTIME], [/* Define to 1 if you have the `mktime\' function. */
-#undef HAVE_MKTIME])
-m4trace:configure.in:46: -1- AH_OUTPUT([HAVE_PUTENV], [/* Define to 1 if you have the `putenv\' function. */
-#undef HAVE_PUTENV])
-m4trace:configure.in:46: -1- AH_OUTPUT([HAVE_STRERROR], [/* Define to 1 if you have the `strerror\' function. */
-#undef HAVE_STRERROR])
-m4trace:configure.in:46: -1- AH_OUTPUT([HAVE_STRSPN], [/* Define to 1 if you have the `strspn\' function. */
-#undef HAVE_STRSPN])
-m4trace:configure.in:46: -1- AH_OUTPUT([HAVE_STRTOD], [/* Define to 1 if you have the `strtod\' function. */
-#undef HAVE_STRTOD])
-m4trace:configure.in:46: -1- AH_OUTPUT([HAVE_STRTOL], [/* Define to 1 if you have the `strtol\' function. */
-#undef HAVE_STRTOL])
-m4trace:configure.in:46: -1- AH_OUTPUT([HAVE_STRTOUL], [/* Define to 1 if you have the `strtoul\' function. */
-#undef HAVE_STRTOUL])
-m4trace:configure.in:47: -1- AC_CHECK_FUNCS([random rand drand48])
-m4trace:configure.in:47: -1- AH_OUTPUT([HAVE_RANDOM], [/* Define to 1 if you have the `random\' function. */
-#undef HAVE_RANDOM])
-m4trace:configure.in:47: -1- AH_OUTPUT([HAVE_RAND], [/* Define to 1 if you have the `rand\' function. */
-#undef HAVE_RAND])
-m4trace:configure.in:47: -1- AH_OUTPUT([HAVE_DRAND48], [/* Define to 1 if you have the `drand48\' function. */
-#undef HAVE_DRAND48])
-m4trace:configure.in:62: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DB2])
-m4trace:configure.in:75: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LOCKF])
-m4trace:configure.in:75: -1- AC_DEFINE_TRACE_LITERAL([HAVE_PTHREADS])
-m4trace:configure.in:77: -1- AC_CANONICAL_HOST
-m4trace:configure.in:77: -1- AC_SUBST([build], [$ac_cv_build])
-m4trace:configure.in:77: -1- AC_SUBST([build_cpu], [`echo $ac_cv_build | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\1/'`])
-m4trace:configure.in:77: -1- AC_SUBST([build_vendor], [`echo $ac_cv_build | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\2/'`])
-m4trace:configure.in:77: -1- AC_SUBST([build_os], [`echo $ac_cv_build | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\3/'`])
-m4trace:configure.in:77: -1- AC_SUBST([host], [$ac_cv_host])
-m4trace:configure.in:77: -1- AC_SUBST([host_cpu], [`echo $ac_cv_host | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\1/'`])
-m4trace:configure.in:77: -1- AC_SUBST([host_vendor], [`echo $ac_cv_host | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\2/'`])
-m4trace:configure.in:77: -1- AC_SUBST([host_os], [`echo $ac_cv_host | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\3/'`])
-m4trace:configure.in:88: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SNPRINTF])
-m4trace:configure.in:89: -1- AC_DEFINE_TRACE_LITERAL([HAVE_VSNPRINTF])
-m4trace:configure.in:113: -1- AC_CHECK_FUNCS([localtime_r], [
- AC_MSG_CHECKING(whether localtime_r is declared)
- AC_EGREP_CPP(localtime_r,[
-#include <time.h>],[
- AC_DEFINE(HAVE_LOCALTIME_R)
- AC_MSG_RESULT(yes)],[
- AC_MSG_RESULT(no)
- AC_MSG_CHECKING(whether localtime_r with -D_REENTRANT is declared)
- AC_EGREP_CPP(localtime_r,[
-#define _REENTRANT
-#include <time.h>],[
- cs_cv_need_reentrant=yes
- AC_MSG_RESULT(yes)],[
- cs_cv_missing=yes
- AC_MSG_RESULT(no)])])], [cs_cv_missing=yes])
-m4trace:configure.in:113: -1- AH_OUTPUT([HAVE_LOCALTIME_R], [/* Define to 1 if you have the `localtime_r\' function. */
-#undef HAVE_LOCALTIME_R])
-m4trace:configure.in:113: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LOCALTIME_R])
-m4trace:configure.in:129: -1- AC_CHECK_FUNCS([gmtime_r], [
- AC_MSG_CHECKING(whether gmtime_r is declared)
- AC_EGREP_CPP(gmtime_r,[
-#include <time.h>],[
- AC_DEFINE(HAVE_GMTIME_R)
- AC_MSG_RESULT(yes)],[
- AC_MSG_RESULT(no)
- AC_MSG_CHECKING(whether gmtime_r with -D_REENTRANT is declared)
- AC_EGREP_CPP(gmtime_r,[
-#define _REENTRANT
-#include <time.h>],[
- cs_cv_need_reentrant=yes
- AC_MSG_RESULT(yes)],[
- cs_cv_missing=yes
- AC_MSG_RESULT(no)])])], [cs_cv_missing=yes])
-m4trace:configure.in:129: -1- AH_OUTPUT([HAVE_GMTIME_R], [/* Define to 1 if you have the `gmtime_r\' function. */
-#undef HAVE_GMTIME_R])
-m4trace:configure.in:129: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GMTIME_R])
-m4trace:configure.in:145: -1- AC_CHECK_FUNCS([strtok_r], [
- AC_MSG_CHECKING(whether strtok_r is declared)
- AC_EGREP_CPP(strtok_r,[
-#include <string.h>],[
- AC_DEFINE(HAVE_STRTOK_R)
- AC_MSG_RESULT(yes)],[
- AC_MSG_RESULT(no)
- AC_MSG_CHECKING(whether strtok_r with -D_REENTRANT is declared)
- AC_EGREP_CPP(strtok_r,[
-#define _REENTRANT
-#include <string.h>],[
- cs_cv_need_reentrant=yes
- AC_MSG_RESULT(yes)],[
- cs_cv_missing=yes
- AC_MSG_RESULT(no)])])], [cs_cv_missing=yes])
-m4trace:configure.in:145: -1- AH_OUTPUT([HAVE_STRTOK_R], [/* Define to 1 if you have the `strtok_r\' function. */
-#undef HAVE_STRTOK_R])
-m4trace:configure.in:145: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRTOK_R])
-m4trace:configure.in:147: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MKSTEMP])
-m4trace:configure.in:156: -1- AC_DEFINE_TRACE_LITERAL([HAVE_REGEX])
-m4trace:configure.in:163: -1- AC_CHECK_LIB([z], [deflate], [cs_cv_compression=yes], [cs_cv_compression=no])
-m4trace:configure.in:171: -1- AC_DEFINE_TRACE_LITERAL([HTML_COMPRESSION])
-m4trace:configure.in:179: -1- AC_DEFINE_TRACE_LITERAL([ENABLE_REMOTE_DEBUG])
-m4trace:configure.in:417: -1- AC_SUBST([_ACJNI_JAVAC], [$ac_cv_path__ACJNI_JAVAC])
-m4trace:configure.in:471: -1- AC_DEFINE_TRACE_LITERAL([ENABLE_GETTEXT])
-m4trace:configure.in:474: -1- AC_SUBST([RANLIB])
-m4trace:configure.in:475: -1- AC_SUBST([AR])
-m4trace:configure.in:476: -1- AC_SUBST([USE_MINGW32])
-m4trace:configure.in:477: -1- AC_SUBST([APXS_PATH])
-m4trace:configure.in:478: -1- AC_SUBST([PERL])
-m4trace:configure.in:479: -1- AC_SUBST([RUBY])
-m4trace:configure.in:480: -1- AC_SUBST([BUILD_WRAPPERS])
-m4trace:configure.in:481: -1- AC_SUBST([JAVA_PATH])
-m4trace:configure.in:482: -1- AC_SUBST([JAVA_INCLUDE_PATH])
-m4trace:configure.in:483: -1- AC_SUBST([PYTHON])
-m4trace:configure.in:484: -1- AC_SUBST([PYTHON_INC])
-m4trace:configure.in:485: -1- AC_SUBST([PYTHON_LIB])
-m4trace:configure.in:486: -1- AC_SUBST([PYTHON_SITE])
-m4trace:configure.in:487: -1- AC_SUBST([EXTRA_UTL_SRC])
-m4trace:configure.in:488: -1- AC_SUBST([EXTRA_UTL_OBJS])
-m4trace:configure.in:489: -1- AC_SUBST([CSHARP_PATH])
-m4trace:configure.in:491: -1- AC_CONFIG_FILES([rules.mk])
-m4trace:configure.in:491: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs])
-m4trace:configure.in:491: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs])
diff --git a/cgi/Android.mk b/cgi/Android.mk
deleted file mode 100644
index 3145015..0000000
--- a/cgi/Android.mk
+++ /dev/null
@@ -1,31 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := docs
-
-LOCAL_SRC_FILES:= \
- cgiwrap.c \
- cgi.c \
- html.c \
- date.c \
- rfc2388.c
-
-LOCAL_C_INCLUDES := $(LOCAL_PATH)/..
-
-LOCAL_CFLAGS := -fPIC
-
-LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
-
-LOCAL_MODULE:= libneo_cgi
-
-LOCAL_SHARED_LIBRARIES := libneo_util libneo_cs
-
-LOCAL_LDLIBS += -lz
-
-include $(BUILD_HOST_SHARED_LIBRARY)
-
-# this forces us into 64 bit mode, even though for the non-simulator builds we
-# mostly don't do that. Java on Hardy is 64 bit, and rather than finding a 32
-# bit java build, just build this in 64 bit.
-$(LOCAL_BUILT_MODULE): HOST_GLOBAL_CFLAGS:=
-$(LOCAL_BUILT_MODULE): HOST_GLOBAL_CPPFLAGS:=
diff --git a/cgi/Makefile b/cgi/Makefile
deleted file mode 100644
index a008508..0000000
--- a/cgi/Makefile
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-ifeq ($(NEOTONIC_ROOT),)
-NEOTONIC_ROOT = ..
-endif
-
-include $(NEOTONIC_ROOT)/rules.mk
-
-CGI_LIB = $(LIB_DIR)libneo_cgi.a
-CGI_SRC = cgiwrap.c cgi.c html.c date.c rfc2388.c
-CGI_OBJ = $(CGI_SRC:%.c=%.o)
-
-STATIC_EXE = cs_static.cgi
-STATIC_SRC = static.c
-STATIC_OBJ = $(STATIC_SRC:%.c=%.o)
-STATIC_CSO = $(STATIC_EXE:%.cgi=%.cso)
-
-CGICSTEST_EXE = cgi_cstest
-CGICSTEST_SRC = cgi_cstest.c
-CGICSTEST_OBJ = $(CGICSTEST_SRC:%.c=%.o)
-
-DLIBS += -lneo_cgi -lneo_cs -lneo_utl # -lefence
-
-TARGETS = $(CGI_LIB) $(STATIC_EXE) $(STATIC_CSO) $(CGICSTEST_EXE)
-
-all: $(TARGETS)
-
-$(CGI_LIB): $(CGI_OBJ)
- $(AR) $@ $(CGI_OBJ)
- $(RANLIB) $@
-
-$(STATIC_EXE): $(STATIC_OBJ) $(DEP_LIBS)
- $(LD) $@ $(STATIC_OBJ) $(LDFLAGS) $(DLIBS) $(LIBS)
-
-$(STATIC_CSO): $(STATIC_OBJ) $(DEP_LIBS)
- $(LDSHARED) -o $@ $(STATIC_OBJ) $(LDFLAGS) $(DLIBS) $(LIBS)
-
-$(CGICSTEST_EXE): $(CGICSTEST_OBJ) $(DEP_LIBS)
- $(LD) $@ $(CGICSTEST_OBJ) $(LDFLAGS) $(DLIBS) $(LIBS)
-
-install: all
- $(NEOTONIC_ROOT)/mkinstalldirs $(DESTDIR)$(cs_includedir)/cgi
- $(INSTALL) -m 644 cgi.h $(DESTDIR)$(cs_includedir)/cgi
- $(INSTALL) -m 644 cgiwrap.h $(DESTDIR)$(cs_includedir)/cgi
- $(INSTALL) -m 644 date.h $(DESTDIR)$(cs_includedir)/cgi
- $(INSTALL) -m 644 html.h $(DESTDIR)$(cs_includedir)/cgi
- $(INSTALL) -m 644 $(CGI_LIB) $(DESTDIR)$(libdir)
- $(INSTALL) $(STATIC_EXE) $(DESTDIR)$(bindir)
-
-clean:
- $(RM) *.o
-
-distclean:
- $(RM) Makefile.depends $(TARGETS) *.o
diff --git a/cgi/cgi.c b/cgi/cgi.c
deleted file mode 100644
index 5be9afe..0000000
--- a/cgi/cgi.c
+++ /dev/null
@@ -1,1604 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#include "cs_config.h"
-
-#include <unistd.h>
-#include <string.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <time.h>
-#if defined(HTML_COMPRESSION)
-#include <zlib.h>
-#endif
-
-#include "util/neo_misc.h"
-#include "util/neo_err.h"
-#include "util/neo_hdf.h"
-#include "util/neo_str.h"
-#include "cgi.h"
-#include "cgiwrap.h"
-#include "html.h"
-#include "cs/cs.h"
-
-
-struct _cgi_vars
-{
- char *env_name;
- char *hdf_name;
-} CGIVars[] = {
- {"AUTH_TYPE", "AuthType"},
- {"CONTENT_TYPE", "ContentType"},
- {"CONTENT_LENGTH", "ContentLength"},
- {"DOCUMENT_ROOT", "DocumentRoot"},
- {"GATEWAY_INTERFACE", "GatewayInterface"},
- {"PATH_INFO", "PathInfo"},
- {"PATH_TRANSLATED", "PathTranslated"},
- {"QUERY_STRING", "QueryString"},
- {"REDIRECT_REQUEST", "RedirectRequest"},
- {"REDIRECT_QUERY_STRING", "RedirectQueryString"},
- {"REDIRECT_STATUS", "RedirectStatus"},
- {"REDIRECT_URL", "RedirectURL",},
- {"REMOTE_ADDR", "RemoteAddress"},
- {"REMOTE_HOST", "RemoteHost"},
- {"REMOTE_IDENT", "RemoteIdent"},
- {"REMOTE_PORT", "RemotePort"},
- {"REMOTE_USER", "RemoteUser"},
- {"REMOTE_GROUP", "RemoteGroup"},
- {"REQUEST_METHOD", "RequestMethod"},
- {"REQUEST_URI", "RequestURI"},
- {"SCRIPT_FILENAME", "ScriptFilename"},
- {"SCRIPT_NAME", "ScriptName"},
- {"SERVER_ADDR", "ServerAddress"},
- {"SERVER_ADMIN", "ServerAdmin"},
- {"SERVER_NAME", "ServerName"},
- {"SERVER_PORT", "ServerPort"},
- {"SERVER_ROOT", "ServerRoot"},
- {"SERVER_PROTOCOL", "ServerProtocol"},
- {"SERVER_SOFTWARE", "ServerSoftware"},
- /* SSL Vars from mod_ssl */
- {"HTTPS", "HTTPS"},
- {"SSL_PROTOCOL", "SSL.Protocol"},
- {"SSL_SESSION_ID", "SSL.SessionID"},
- {"SSL_CIPHER", "SSL.Cipher"},
- {"SSL_CIPHER_EXPORT", "SSL.Cipher.Export"},
- {"SSL_CIPHER_USEKEYSIZE", "SSL.Cipher.UseKeySize"},
- {"SSL_CIPHER_ALGKEYSIZE", "SSL.Cipher.AlgKeySize"},
- {"SSL_VERSION_INTERFACE", "SSL.Version.Interface"},
- {"SSL_VERSION_LIBRARY", "SSL.Version.Library"},
- {"SSL_CLIENT_M_VERSION", "SSL.Client.M.Version"},
- {"SSL_CLIENT_M_SERIAL", "SSL.Client.M.Serial"},
- {"SSL_CLIENT_S_DN", "SSL.Client.S.DN"},
- {"SSL_CLIENT_S_DN_x509", "SSL.Client.S.DN.x509"},
- {"SSL_CLIENT_I_DN", "SSL.Client.I.DN"},
- {"SSL_CLIENT_I_DN_x509", "SSL.Client.I.DN.x509"},
- {"SSL_CLIENT_V_START", "SSL.Client.V.Start"},
- {"SSL_CLIENT_V_END", "SSL.Client.V.End"},
- {"SSL_CLIENT_A_SIG", "SSL.Client.A.SIG"},
- {"SSL_CLIENT_A_KEY", "SSL.Client.A.KEY"},
- {"SSL_CLIENT_CERT", "SSL.Client.CERT"},
- {"SSL_CLIENT_CERT_CHAINn", "SSL.Client.CERT.CHAINn"},
- {"SSL_CLIENT_VERIFY", "SSL.Client.Verify"},
- {"SSL_SERVER_M_VERSION", "SSL.Server.M.Version"},
- {"SSL_SERVER_M_SERIAL", "SSL.Server.M.Serial"},
- {"SSL_SERVER_S_DN", "SSL.Server.S.DN"},
- {"SSL_SERVER_S_DN_x509", "SSL.Server.S.DN.x509"},
- {"SSL_SERVER_S_DN_CN", "SSL.Server.S.DN.CN"},
- {"SSL_SERVER_S_DN_EMAIL", "SSL.Server.S.DN.Email"},
- {"SSL_SERVER_S_DN_O", "SSL.Server.S.DN.O"},
- {"SSL_SERVER_S_DN_OU", "SSL.Server.S.DN.OU"},
- {"SSL_SERVER_S_DN_C", "SSL.Server.S.DN.C"},
- {"SSL_SERVER_S_DN_SP", "SSL.Server.S.DN.SP"},
- {"SSL_SERVER_S_DN_L", "SSL.Server.S.DN.L"},
- {"SSL_SERVER_I_DN", "SSL.Server.I.DN"},
- {"SSL_SERVER_I_DN_x509", "SSL.Server.I.DN.x509"},
- {"SSL_SERVER_I_DN_CN", "SSL.Server.I.DN.CN"},
- {"SSL_SERVER_I_DN_EMAIL", "SSL.Server.I.DN.Email"},
- {"SSL_SERVER_I_DN_O", "SSL.Server.I.DN.O"},
- {"SSL_SERVER_I_DN_OU", "SSL.Server.I.DN.OU"},
- {"SSL_SERVER_I_DN_C", "SSL.Server.I.DN.C"},
- {"SSL_SERVER_I_DN_SP", "SSL.Server.I.DN.SP"},
- {"SSL_SERVER_I_DN_L", "SSL.Server.I.DN.L"},
- {"SSL_SERVER_V_START", "SSL.Server.V.Start"},
- {"SSL_SERVER_V_END", "SSL.Server.V.End"},
- {"SSL_SERVER_A_SIG", "SSL.Server.A.SIG"},
- {"SSL_SERVER_A_KEY", "SSL.Server.A.KEY"},
- {"SSL_SERVER_CERT", "SSL.Server.CERT"},
- /* SSL Vars mapped from others */
- /* Hmm, if we're running under mod_ssl w/ +CompatEnvVars, we set these
- * twice... */
- {"SSL_PROTOCOL_VERSION", "SSL.Protocol"},
- {"SSLEAY_VERSION", "SSL.Version.Library"},
- {"HTTPS_CIPHER", "SSL.Cipher"},
- {"HTTPS_EXPORT", "SSL.Cipher.Export"},
- {"HTTPS_SECRETKEYSIZE", "SSL.Cipher.UseKeySize"},
- {"HTTPS_KEYSIZE", "SSL.Cipher.AlgKeySize"},
- {"SSL_SERVER_KEY_SIZE", "SSL.Cipher.AlgKeySize"},
- {"SSL_SERVER_CERTIFICATE", "SSL.Server.CERT"},
- {"SSL_SERVER_CERT_START", "SSL.Server.V.Start"},
- {"SSL_SERVER_CERT_END", "SSL.Server.V.End"},
- {"SSL_SERVER_CERT_SERIAL", "SSL.Server.M.Serial"},
- {"SSL_SERVER_SIGNATURE_ALGORITHM", "SSL.Server.A.SIG"},
- {"SSL_SERVER_DN", "SSL.Server.S.DN"},
- {"SSL_SERVER_CN", "SSL.Server.S.DN.CN"},
- {"SSL_SERVER_EMAIL", "SSL.Server.S.DN.Email"},
- {"SSL_SERVER_O", "SSL.Server.S.DN.O"},
- {"SSL_SERVER_OU", "SSL.Server.S.DN.OU"},
- {"SSL_SERVER_C", "SSL.Server.S.DN.C"},
- {"SSL_SERVER_SP", "SSL.Server.S.DN.SP"},
- {"SSL_SERVER_L", "SSL.Server.S.DN.L"},
- {"SSL_SERVER_IDN", "SSL.Server.I.DN"},
- {"SSL_SERVER_ICN", "SSL.Server.I.DN.CN"},
- {"SSL_SERVER_IEMAIL", "SSL.Server.I.DN.Email"},
- {"SSL_SERVER_IO", "SSL.Server.I.DN.O"},
- {"SSL_SERVER_IOU", "SSL.Server.I.DN.OU"},
- {"SSL_SERVER_IC", "SSL.Server.I.DN.C"},
- {"SSL_SERVER_ISP", "SSL.Server.I.DN.SP"},
- {"SSL_SERVER_IL", "SSL.Server.I.DN.L"},
- {"SSL_CLIENT_CERTIFICATE", "SSL.Client.CERT"},
- {"SSL_CLIENT_CERT_START", "SSL.Client.V.Start"},
- {"SSL_CLIENT_CERT_END", "SSL.Client.V.End"},
- {"SSL_CLIENT_CERT_SERIAL", "SSL.Client.M.Serial"},
- {"SSL_CLIENT_SIGNATURE_ALGORITHM", "SSL.Client.A.SIG"},
- {"SSL_CLIENT_DN", "SSL.Client.S.DN"},
- {"SSL_CLIENT_CN", "SSL.Client.S.DN.CN"},
- {"SSL_CLIENT_EMAIL", "SSL.Client.S.DN.Email"},
- {"SSL_CLIENT_O", "SSL.Client.S.DN.O"},
- {"SSL_CLIENT_OU", "SSL.Client.S.DN.OU"},
- {"SSL_CLIENT_C", "SSL.Client.S.DN.C"},
- {"SSL_CLIENT_SP", "SSL.Client.S.DN.SP"},
- {"SSL_CLIENT_L", "SSL.Client.S.DN.L"},
- {"SSL_CLIENT_IDN", "SSL.Client.I.DN"},
- {"SSL_CLIENT_ICN", "SSL.Client.I.DN.CN"},
- {"SSL_CLIENT_IEMAIL", "SSL.Client.I.DN.Email"},
- {"SSL_CLIENT_IO", "SSL.Client.I.DN.O"},
- {"SSL_CLIENT_IOU", "SSL.Client.I.DN.OU"},
- {"SSL_CLIENT_IC", "SSL.Client.I.DN.C"},
- {"SSL_CLIENT_ISP", "SSL.Client.I.DN.SP"},
- {"SSL_CLIENT_IL", "SSL.Client.I.DN.L"},
- {"SSL_EXPORT", "SSL.Cipher.Export"},
- {"SSL_KEYSIZE", "SSL.Cipher.AlgKeySize"},
- {"SSL_SECKEYSIZE", "SSL.Cipher.UseKeySize"},
- {"SSL_SSLEAY_VERSION", "SSL.Version.Library"},
-/* Old vars not in mod_ssl */
- {"SSL_STRONG_CRYPTO", "SSL.Strong.Crypto"},
- {"SSL_SERVER_KEY_EXP", "SSL.Server.Key.Exp"},
- {"SSL_SERVER_KEY_ALGORITHM", "SSL.Server.Key.Algorithm"},
- {"SSL_SERVER_KEY_SIZE", "SSL.Server.Key.Size"},
- {"SSL_SERVER_SESSIONDIR", "SSL.Server.SessionDir"},
- {"SSL_SERVER_CERTIFICATELOGDIR", "SSL.Server.CertificateLogDir"},
- {"SSL_SERVER_CERTFILE", "SSL.Server.CertFile"},
- {"SSL_SERVER_KEYFILE", "SSL.Server.KeyFile"},
- {"SSL_SERVER_KEYFILETYPE", "SSL.Server.KeyFileType"},
- {"SSL_CLIENT_KEY_EXP", "SSL.Client.Key.Exp"},
- {"SSL_CLIENT_KEY_ALGORITHM", "SSL.Client.Key.Algorithm"},
- {"SSL_CLIENT_KEY_SIZE", "SSL.Client.Key.Size"},
- {NULL, NULL}
-};
-
-struct _http_vars
-{
- char *env_name;
- char *hdf_name;
-} HTTPVars[] = {
- {"HTTP_ACCEPT", "Accept"},
- {"HTTP_ACCEPT_CHARSET", "AcceptCharset"},
- {"HTTP_ACCEPT_ENCODING", "AcceptEncoding"},
- {"HTTP_ACCEPT_LANGUAGE", "AcceptLanguage"},
- {"HTTP_COOKIE", "Cookie"},
- {"HTTP_HOST", "Host"},
- {"HTTP_USER_AGENT", "UserAgent"},
- {"HTTP_IF_MODIFIED_SINCE", "IfModifiedSince"},
- {"HTTP_REFERER", "Referer"},
- {"HTTP_VIA", "Via"},
- /* SOAP */
- {"HTTP_SOAPACTION", "Soap.Action"},
- {NULL, NULL}
-};
-
-static char *Argv0 = "";
-
-int IgnoreEmptyFormVars = 0;
-
-static int ExceptionsInit = 0;
-NERR_TYPE CGIFinished = -1;
-NERR_TYPE CGIUploadCancelled = -1;
-NERR_TYPE CGIParseNotHandled = -1;
-
-static NEOERR *_add_cgi_env_var (CGI *cgi, char *env, char *name)
-{
- NEOERR *err;
- char *s;
-
- err = cgiwrap_getenv (env, &s);
- if (err != STATUS_OK) return nerr_pass (err);
- if (s != NULL)
- {
- err = hdf_set_buf (cgi->hdf, name, s);
- if (err != STATUS_OK)
- {
- free(s);
- return nerr_pass (err);
- }
- }
- return STATUS_OK;
-}
-
-char *cgi_url_unescape (char *value)
-{
- int i = 0, o = 0;
- unsigned char *s = (unsigned char *)value;
-
- if (s == NULL) return value;
- while (s[i])
- {
- if (s[i] == '+')
- {
- s[o++] = ' ';
- i++;
- }
- else if (s[i] == '%' && isxdigit(s[i+1]) && isxdigit(s[i+2]))
- {
- char num;
- num = (s[i+1] >= 'A') ? ((s[i+1] & 0xdf) - 'A') + 10 : (s[i+1] - '0');
- num *= 16;
- num += (s[i+2] >= 'A') ? ((s[i+2] & 0xdf) - 'A') + 10 : (s[i+2] - '0');
- s[o++] = num;
- i+=3;
- }
- else {
- s[o++] = s[i++];
- }
- }
- if (i && o) s[o] = '\0';
- return (char *)s;
-}
-
-NEOERR *cgi_js_escape (const char *in, char **esc)
-{
- return nerr_pass(neos_js_escape(in, esc));
-}
-
-NEOERR *cgi_url_escape (const char *buf, char **esc)
-{
- return nerr_pass(neos_url_escape(buf, esc, NULL));
-}
-
-NEOERR *cgi_url_escape_more (const char *in, char **esc,
- const char *other)
-{
- return nerr_pass(neos_url_escape(in, esc, other));
-}
-
-NEOERR *cgi_url_validate (const char *buf, char **esc)
-{
- return nerr_pass(neos_url_validate(buf, esc));
-}
-
-static NEOERR *_parse_query (CGI *cgi, char *query)
-{
- NEOERR *err = STATUS_OK;
- char *t, *k, *v, *l;
- char buf[256];
- char unnamed[10];
- int unnamed_count = 0;
- HDF *obj, *child;
-
- if (query && *query)
- {
- k = strtok_r(query, "&", &l);
- while (k && *k)
- {
- v = strchr(k, '=');
- if (v == NULL)
- {
- v = "";
- }
- else
- {
- *v = '\0';
- v++;
- }
-
-
- /* Check for some invalid query strings */
- if (*k == 0) {
- /* '?=foo' gets mapped in as Query._1=foo */
- snprintf(unnamed,sizeof(unnamed), "_%d", unnamed_count++);
- k = unnamed;
- } else if (*k == '.') {
- /* an hdf element can't start with a period */
- *k = '_';
- }
- snprintf(buf, sizeof(buf), "Query.%s", cgi_url_unescape(k));
-
- if (!(cgi->ignore_empty_form_vars && (*v == '\0')))
- {
-
-
- cgi_url_unescape(v);
- obj = hdf_get_obj (cgi->hdf, buf);
- if (obj != NULL)
- {
- int i = 0;
- char buf2[10];
- child = hdf_obj_child (obj);
- if (child == NULL)
- {
- t = hdf_obj_value (obj);
- err = hdf_set_value (obj, "0", t);
- if (err != STATUS_OK) break;
- i = 1;
- }
- else
- {
- while (child != NULL)
- {
- i++;
- child = hdf_obj_next (child);
- if (err != STATUS_OK) break;
- }
- if (err != STATUS_OK) break;
- }
- snprintf (buf2, sizeof(buf2), "%d", i);
- err = hdf_set_value (obj, buf2, v);
- if (err != STATUS_OK) break;
- }
- err = hdf_set_value (cgi->hdf, buf, v);
- if (nerr_match(err, NERR_ASSERT)) {
- STRING str;
-
- string_init(&str);
- nerr_error_string(err, &str);
- ne_warn("Unable to set Query value: %s = %s: %s", buf, v, str.buf);
- string_clear(&str);
- nerr_ignore(&err);
- }
- if (err != STATUS_OK) break;
- }
- k = strtok_r(NULL, "&", &l);
- }
- }
- return nerr_pass(err);
-}
-
-/* Is it an error if its a short read? */
-static NEOERR *_parse_post_form (CGI *cgi)
-{
- NEOERR *err = STATUS_OK;
- char *l, *query;
- int len, r, o;
-
- l = hdf_get_value (cgi->hdf, "CGI.ContentLength", NULL);
- if (l == NULL) return STATUS_OK;
- len = atoi (l);
- if (len <= 0) return STATUS_OK;
-
- cgi->data_expected = len;
-
- query = (char *) malloc (sizeof(char) * (len + 1));
- if (query == NULL)
- return nerr_raise (NERR_NOMEM,
- "Unable to allocate memory to read POST input of length %d", len);
-
-
- o = 0;
- while (o < len)
- {
- cgiwrap_read (query + o, len - o, &r);
- if (r <= 0) break;
- o = o + r;
- }
- if (r < 0)
- {
- free(query);
- return nerr_raise_errno (NERR_IO, "Short read on CGI POST input (%d < %d)",
- o, len);
- }
- if (o != len)
- {
- free(query);
- return nerr_raise (NERR_IO, "Short read on CGI POST input (%d < %d)",
- o, len);
- }
- query[len] = '\0';
- err = _parse_query (cgi, query);
- free(query);
- return nerr_pass(err);
-}
-
-static NEOERR *_parse_cookie (CGI *cgi)
-{
- NEOERR *err;
- char *cookie;
- char *k, *v, *l;
- HDF *obj;
-
- err = hdf_get_copy (cgi->hdf, "HTTP.Cookie", &cookie, NULL);
- if (err != STATUS_OK) return nerr_pass(err);
- if (cookie == NULL) return STATUS_OK;
-
- err = hdf_set_value (cgi->hdf, "Cookie", cookie);
- if (err != STATUS_OK)
- {
- free(cookie);
- return nerr_pass(err);
- }
- obj = hdf_get_obj (cgi->hdf, "Cookie");
-
- k = l = cookie;
- while (*l && *l != '=' && *l != ';') l++;
- while (*k)
- {
- if (*l == '=')
- {
- if (*l) *l++ = '\0';
- v = l;
- while (*l && *l != ';') l++;
- if (*l) *l++ = '\0';
- }
- else
- {
- v = "";
- if (*l) *l++ = '\0';
- }
- k = neos_strip (k);
- v = neos_strip (v);
- if (k[0] && v[0])
- {
- err = hdf_set_value (obj, k, v);
- if (nerr_match(err, NERR_ASSERT)) {
- STRING str;
-
- string_init(&str);
- nerr_error_string(err, &str);
- ne_warn("Unable to set Cookie value: %s = %s: %s", k, v, str.buf);
- string_clear(&str);
- nerr_ignore(&err);
- }
- if (err) break;
- }
- k = l;
- while (*l && *l != '=' && *l != ';') l++;
- }
-
- free (cookie);
-
- return nerr_pass(err);
-}
-
-#ifdef ENABLE_REMOTE_DEBUG
-
-static void _launch_debugger (CGI *cgi, char *display)
-{
- pid_t myPid, pid;
- char buffer[127];
- char *debugger;
- HDF *obj;
- char *allowed;
-
- /* Only allow remote debugging from allowed hosts */
- for (obj = hdf_get_child (cgi->hdf, "Config.Displays");
- obj; obj = hdf_obj_next (obj))
- {
- allowed = hdf_obj_value (obj);
- if (allowed && !strcmp (display, allowed)) break;
- }
- if (obj == NULL) return;
-
- myPid = getpid();
-
- if ((pid = fork()) < 0)
- return;
-
- if ((debugger = hdf_get_value (cgi->hdf, "Config.Debugger", NULL)) == NULL)
- {
- debugger = "/usr/local/bin/sudo /usr/local/bin/ddd -display %s %s %d";
- }
-
- if (!pid)
- {
- sprintf(buffer, debugger, display, Argv0, myPid);
- execl("/bin/sh", "sh", "-c", buffer, NULL);
- }
- else
- {
- sleep(60);
- }
-}
-
-#endif
-
-static NEOERR *cgi_pre_parse (CGI *cgi)
-{
- NEOERR *err;
- int x = 0;
- char buf[256];
- char *query;
-
- while (CGIVars[x].env_name)
- {
- snprintf (buf, sizeof(buf), "CGI.%s", CGIVars[x].hdf_name);
- err = _add_cgi_env_var(cgi, CGIVars[x].env_name, buf);
- if (err != STATUS_OK) return nerr_pass (err);
- x++;
- }
- x = 0;
- while (HTTPVars[x].env_name)
- {
- snprintf (buf, sizeof(buf), "HTTP.%s", HTTPVars[x].hdf_name);
- err = _add_cgi_env_var(cgi, HTTPVars[x].env_name, buf);
- if (err != STATUS_OK) return nerr_pass (err);
- x++;
- }
- err = _parse_cookie(cgi);
- if (err != STATUS_OK) return nerr_pass (err);
-
- err = hdf_get_copy (cgi->hdf, "CGI.QueryString", &query, NULL);
- if (err != STATUS_OK) return nerr_pass (err);
- if (query != NULL)
- {
- err = _parse_query(cgi, query);
- free(query);
- if (err != STATUS_OK) return nerr_pass (err);
- }
-
- {
- char *d = hdf_get_value(cgi->hdf, "Query.debug_pause", NULL);
- char *d_p = hdf_get_value(cgi->hdf, "Config.DebugPassword", NULL);
-
- if (hdf_get_int_value(cgi->hdf, "Config.DebugEnabled", 0) &&
- d && d_p && !strcmp(d, d_p)) {
- sleep(20);
- }
- }
-
-#ifdef ENABLE_REMOTE_DEBUG
- {
- char *display;
-
- display = hdf_get_value (cgi->hdf, "Query.xdisplay", NULL);
- if (display)
- {
- fprintf(stderr, "** Got display %s\n", display);
- _launch_debugger(cgi, display);
- }
- }
-#endif
-
- return STATUS_OK;
-}
-
-NEOERR *cgi_register_parse_cb(CGI *cgi, const char *method, const char *ctype,
- void *rock, CGI_PARSE_CB parse_cb)
-{
- struct _cgi_parse_cb *my_pcb;
-
- if (method == NULL || ctype == NULL)
- return nerr_raise(NERR_ASSERT, "method and type must not be NULL to register cb");
-
- my_pcb = (struct _cgi_parse_cb *) calloc(1, sizeof(struct _cgi_parse_cb));
- if (my_pcb == NULL)
- return nerr_raise(NERR_NOMEM, "Unable to allocate memory to register parse cb");
-
- my_pcb->method = strdup(method);
- my_pcb->ctype = strdup(ctype);
- if (my_pcb->method == NULL || my_pcb->ctype == NULL)
- {
- if (my_pcb->method != NULL)
- free(my_pcb->method);
- if (my_pcb->ctype != NULL)
- free(my_pcb->ctype);
- free(my_pcb);
- return nerr_raise(NERR_NOMEM, "Unable to allocate memory to register parse cb");
- }
- if (!strcmp(my_pcb->method, "*"))
- my_pcb->any_method = 1;
- if (!strcmp(my_pcb->ctype, "*"))
- my_pcb->any_ctype = 1;
- my_pcb->rock = rock;
- my_pcb->parse_cb = parse_cb;
- my_pcb->next = cgi->parse_callbacks;
- cgi->parse_callbacks = my_pcb;
- return STATUS_OK;
-}
-
-NEOERR *cgi_parse (CGI *cgi)
-{
- NEOERR *err;
- char *method, *type;
- struct _cgi_parse_cb *pcb;
-
-
- method = hdf_get_value (cgi->hdf, "CGI.RequestMethod", "GET");
- type = hdf_get_value (cgi->hdf, "CGI.ContentType", NULL);
- /* Walk the registered parse callbacks for a matching one */
- pcb = cgi->parse_callbacks;
- while (pcb != NULL)
- {
- if ( (pcb->any_method || !strcasecmp(pcb->method, method)) &&
- (pcb->any_ctype || (type && !strcasecmp(pcb->ctype, type))) )
- {
- err = pcb->parse_cb(cgi, method, type, pcb->rock);
- if (err && !nerr_handle(&err, CGIParseNotHandled))
- return nerr_pass(err);
- }
- pcb = pcb->next;
- }
-
- /* Fallback to internal methods */
-
- if (!strcmp(method, "POST"))
- {
- if (type && !strcmp(type, "application/x-www-form-urlencoded"))
- {
- err = _parse_post_form(cgi);
- if (err != STATUS_OK) return nerr_pass (err);
- }
- else if (type && !strncmp (type, "multipart/form-data", 19))
- {
- err = parse_rfc2388 (cgi);
- if (err != STATUS_OK) return nerr_pass (err);
- }
-#if 0
- else
- {
- int len, x, r;
- char *l;
- char buf[4096];
- FILE *fp;
-
- fp = fopen("/tmp/upload", "w");
-
- l = hdf_get_value (cgi->hdf, "CGI.ContentLength", NULL);
- if (l == NULL) return STATUS_OK;
- len = atoi (l);
-
- x = 0;
- while (x < len)
- {
- if (len-x > sizeof(buf))
- cgiwrap_read (buf, sizeof(buf), &r);
- else
- cgiwrap_read (buf, len - x, &r);
- fwrite (buf, 1, r, fp);
- x += r;
- }
- fclose (fp);
- if (err) return nerr_pass(err);
- }
-#endif
- }
- else if (!strcmp(method, "PUT"))
- {
- FILE *fp;
- int len, x, r, w;
- char *l;
- char buf[4096];
- int unlink_files = hdf_get_int_value(cgi->hdf, "Config.Upload.Unlink", 1);
-
- err = open_upload(cgi, unlink_files, &fp);
- if (err) return nerr_pass(err);
-
- l = hdf_get_value (cgi->hdf, "CGI.ContentLength", NULL);
- if (l == NULL) return STATUS_OK;
- len = atoi (l);
- if (len <= 0) return STATUS_OK;
-
- x = 0;
- while (x < len)
- {
- if (len-x > sizeof(buf))
- cgiwrap_read (buf, sizeof(buf), &r);
- else
- cgiwrap_read (buf, len - x, &r);
- w = fwrite (buf, sizeof(char), r, fp);
- if (w != r)
- {
- err = nerr_raise_errno(NERR_IO, "Short write on PUT: %d < %d", w, r);
- break;
- }
- x += r;
- }
- if (err) return nerr_pass(err);
- fseek(fp, 0, SEEK_SET);
- l = hdf_get_value(cgi->hdf, "CGI.PathInfo", NULL);
- if (l) err = hdf_set_value (cgi->hdf, "PUT", l);
- if (err) return nerr_pass(err);
- if (type) err = hdf_set_value (cgi->hdf, "PUT.Type", type);
- if (err) return nerr_pass(err);
- err = hdf_set_int_value (cgi->hdf, "PUT.FileHandle", uListLength(cgi->files));
- if (err) return nerr_pass(err);
- if (!unlink_files)
- {
- char *name;
- err = uListGet(cgi->filenames, uListLength(cgi->filenames)-1,
- (void *)&name);
- if (err) return nerr_pass(err);
- err = hdf_set_value (cgi->hdf, "PUT.FileName", name);
- if (err) return nerr_pass(err);
- }
- }
- return STATUS_OK;
-}
-
-NEOERR *cgi_init (CGI **cgi, HDF *hdf)
-{
- NEOERR *err = STATUS_OK;
- CGI *mycgi;
-
- if (ExceptionsInit == 0)
- {
- err = nerr_init();
- if (err) return nerr_pass(err);
- err = nerr_register(&CGIFinished, "CGIFinished");
- if (err) return nerr_pass(err);
- err = nerr_register(&CGIUploadCancelled, "CGIUploadCancelled");
- if (err) return nerr_pass(err);
- err = nerr_register(&CGIUploadCancelled, "CGIParseNotHandled");
- if (err) return nerr_pass(err);
- ExceptionsInit = 1;
- }
-
- *cgi = NULL;
- mycgi = (CGI *) calloc (1, sizeof(CGI));
- if (mycgi == NULL)
- return nerr_raise(NERR_NOMEM, "Unable to allocate space for CGI");
-
- mycgi->time_start = ne_timef();
-
- mycgi->ignore_empty_form_vars = IgnoreEmptyFormVars;
-
- do
- {
- if (hdf == NULL)
- {
- err = hdf_init (&(mycgi->hdf));
- if (err != STATUS_OK) break;
- }
- else
- {
- mycgi->hdf = hdf;
- }
- err = cgi_pre_parse (mycgi);
- if (err != STATUS_OK) break;
-
- } while (0);
-
- if (err == STATUS_OK)
- *cgi = mycgi;
- else
- {
- cgi_destroy(&mycgi);
- }
- return nerr_pass(err);
-}
-
-static void _destroy_tmp_file(char *filename)
-{
- unlink(filename);
- free(filename);
-}
-
-void cgi_destroy (CGI **cgi)
-{
- CGI *my_cgi;
-
- if (!cgi || !*cgi)
- return;
- my_cgi = *cgi;
- if (my_cgi->hdf)
- hdf_destroy (&(my_cgi->hdf));
- if (my_cgi->buf)
- free(my_cgi->buf);
- if (my_cgi->files)
- uListDestroyFunc(&(my_cgi->files), (void (*)(void *))fclose);
- if (my_cgi->filenames)
- uListDestroyFunc(&(my_cgi->filenames), (void (*)(void *))_destroy_tmp_file);
- free (*cgi);
- *cgi = NULL;
-}
-
-static NEOERR *render_cb (void *ctx, char *buf)
-{
- STRING *str = (STRING *)ctx;
- NEOERR *err;
-
- err = nerr_pass(string_append(str, buf));
- return err;
-}
-
-static NEOERR *cgi_headers (CGI *cgi)
-{
- NEOERR *err = STATUS_OK;
- HDF *obj, *child;
- char *s, *charset = NULL;
-
- if (hdf_get_int_value (cgi->hdf, "Config.NoCache", 0))
- {
- /* Ok, we try really hard to defeat caches here */
- /* this isn't in any HTTP rfc's, it just seems to be a convention */
- err = cgiwrap_writef ("Pragma: no-cache\r\n");
- if (err != STATUS_OK) return nerr_pass (err);
- err = cgiwrap_writef ("Expires: Fri, 01 Jan 1990 00:00:00 GMT\r\n");
- if (err != STATUS_OK) return nerr_pass (err);
- err = cgiwrap_writef ("Cache-control: no-cache, must-revalidate, no-cache=\"Set-Cookie\", private\r\n");
- if (err != STATUS_OK) return nerr_pass (err);
- }
- obj = hdf_get_obj (cgi->hdf, "cgiout");
- if (obj)
- {
- s = hdf_get_value (obj, "Status", NULL);
- if (s)
- err = cgiwrap_writef ("Status: %s\r\n", s);
- if (err != STATUS_OK) return nerr_pass (err);
- s = hdf_get_value (obj, "Location", NULL);
- if (s)
- err = cgiwrap_writef ("Location: %s\r\n", s);
- if (err != STATUS_OK) return nerr_pass (err);
- child = hdf_get_obj (cgi->hdf, "cgiout.other");
- if (child)
- {
- child = hdf_obj_child (child);
- while (child != NULL)
- {
- s = hdf_obj_value (child);
- err = cgiwrap_writef ("%s\r\n", s);
- if (err != STATUS_OK) return nerr_pass (err);
- child = hdf_obj_next(child);
- }
- }
- charset = hdf_get_value (obj, "charset", NULL);
- s = hdf_get_value (obj, "ContentType", "text/html");
- if (charset)
- err = cgiwrap_writef ("Content-Type: %s; charset=%s\r\n\r\n", s, charset);
- else
- err = cgiwrap_writef ("Content-Type: %s\r\n\r\n", s);
- if (err != STATUS_OK) return nerr_pass (err);
- }
- else
- {
- /* Default */
- err = cgiwrap_writef ("Content-Type: text/html\r\n\r\n");
- if (err != STATUS_OK) return nerr_pass (err);
- }
- return STATUS_OK;
-}
-
-#if defined(HTML_COMPRESSION)
-/* Copy these here from zutil.h, which we aren't supposed to include */
-#define DEF_MEM_LEVEL 8
-#define OS_CODE 0x03
-
-static NEOERR *cgi_compress (STRING *str, char *obuf, int *olen)
-{
- z_stream stream;
- int err;
-
- stream.next_in = (Bytef*)str->buf;
- stream.avail_in = (uInt)str->len;
- stream.next_out = (Bytef*)obuf;
- stream.avail_out = (uInt)*olen;
- if ((uLong)stream.avail_out != *olen)
- return nerr_raise(NERR_NOMEM, "Destination too big: %d", *olen);
-
- stream.zalloc = (alloc_func)0;
- stream.zfree = (free_func)0;
- stream.opaque = (voidpf)0;
-
- /* err = deflateInit(&stream, Z_DEFAULT_COMPRESSION); */
- err = deflateInit2(&stream, Z_DEFAULT_COMPRESSION, Z_DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);
- if (err != Z_OK)
- return nerr_raise(NERR_SYSTEM, "deflateInit2 returned %d", err);
-
- err = deflate(&stream, Z_FINISH);
- if (err != Z_STREAM_END) {
- deflateEnd(&stream);
- return nerr_raise(NERR_SYSTEM, "deflate returned %d", err);
- }
- *olen = stream.total_out;
-
- err = deflateEnd(&stream);
- return STATUS_OK;
-}
-#endif
-
-/* This ws strip function is Dave's version, designed to make debug
- * easier, and the output a bit smaller... but not as small as it could
- * be: essentially, it strips all empty lines, all extra space at the
- * end of the line, except in pre/textarea tags.
- *
- * Ok, expanding to 3 levels:
- * 0 - No stripping
- * 1 - Dave's debug stripper (as above)
- * 2 - strip all extra white space
- *
- * We don't currently strip white space in a tag
- *
- * */
-
-#if 0
-static void debug_output(char *header, char *s, int n)
-{
- int x;
- fprintf (stderr, "%s ", header);
- for (x = 0; x < n; x++)
- {
- fprintf (stderr, "%c", s[x]);
- }
- fprintf(stderr, "\n");
-}
-#endif
-
-void cgi_html_ws_strip(STRING *str, int level)
-{
- int ws = 0;
- int seen_nonws = level > 1;
- int i, o, l;
- char *ch;
-
- i = o = 0;
- if (str->len) {
- ws = isspace(str->buf[0]);
- }
- while (i < str->len)
- {
- if (str->buf[i] == '<')
- {
- str->buf[o++] = str->buf[i++];
- if (!strncasecmp(str->buf + i, "textarea", 8))
- {
- ch = str->buf + i;
- do
- {
- ch = strchr(ch, '<');
- if (ch == NULL)
- {
- memmove(str->buf + o, str->buf + i, str->len - i);
- str->len = o + str->len - i;
- str->buf[str->len] = '\0';
- return;
- }
- ch++;
- } while (strncasecmp(ch, "/textarea>", 10));
- ch += 10;
- l = ch - str->buf - i;
- memmove(str->buf + o, str->buf + i, l);
- o += l;
- i += l;
- }
- else if (!strncasecmp(str->buf + i, "pre", 3))
- {
- ch = str->buf + i;
- do
- {
- ch = strchr(ch, '<');
- if (ch == NULL)
- {
- memmove(str->buf + o, str->buf + i, str->len - i);
- str->len = o + str->len - i;
- str->buf[str->len] = '\0';
- return;
- }
- ch++;
- } while (strncasecmp(ch, "/pre>", 5));
- ch += 5;
- l = ch - str->buf - i;
- memmove(str->buf + o, str->buf + i, l);
- o += l;
- i += l;
- }
- else
- {
- ch = strchr(str->buf + i, '>');
- if (ch == NULL)
- {
- memmove(str->buf + o, str->buf + i, str->len - i);
- str->len = o + str->len - i;
- str->buf[str->len] = '\0';
- return;
- }
- ch++;
- /* debug_output("copying tag", str->buf + i, ch - str->buf - i);
- * */
- l = ch - str->buf - i;
- memmove(str->buf + o, str->buf + i, l);
- o += l;
- i += l;
- }
- /* debug_output("result", str->buf, o); */
- seen_nonws = 1;
- ws = 0;
- }
- else if (str->buf[i] == '\n')
- {
- /* This has the effect of erasing all whitespace at the eol plus
- * erasing all blank lines */
- while (o && isspace(str->buf[o-1])) o--;
- str->buf[o++] = str->buf[i++];
- ws = level > 1;
- seen_nonws = level > 1;
- }
- else if (seen_nonws && isspace(str->buf[i]))
- {
- if (ws)
- {
- i++;
- }
- else
- {
- str->buf[o++] = str->buf[i++];
- ws = 1;
- }
- }
- else
- {
- seen_nonws = 1;
- ws = 0;
- str->buf[o++] = str->buf[i++];
- }
- }
-
- str->len = o;
- str->buf[str->len] = '\0';
-}
-
-NEOERR *cgi_output (CGI *cgi, STRING *str)
-{
- NEOERR *err = STATUS_OK;
- double dis;
- int is_html = 0;
- int use_deflate = 0;
- int use_gzip = 0;
- int do_debug = 0;
- int do_timefooter = 0;
- int ws_strip_level = 0;
- char *s, *e;
-
- s = hdf_get_value (cgi->hdf, "Query.debug", NULL);
- e = hdf_get_value (cgi->hdf, "Config.DebugPassword", NULL);
- if (hdf_get_int_value(cgi->hdf, "Config.DebugEnabled", 0) &&
- s && e && !strcmp(s, e)) do_debug = 1;
- do_timefooter = hdf_get_int_value (cgi->hdf, "Config.TimeFooter", 1);
- ws_strip_level = hdf_get_int_value (cgi->hdf, "Config.WhiteSpaceStrip", 1);
-
- dis = ne_timef();
- s = hdf_get_value (cgi->hdf, "cgiout.ContentType", "text/html");
- if (!strcasecmp(s, "text/html"))
- is_html = 1;
-
-#if defined(HTML_COMPRESSION)
- /* Determine whether or not we can compress the output */
- if (is_html && hdf_get_int_value (cgi->hdf, "Config.CompressionEnabled", 0))
- {
- err = hdf_get_copy (cgi->hdf, "HTTP.AcceptEncoding", &s, NULL);
- if (err != STATUS_OK) return nerr_pass (err);
- if (s)
- {
- char *next;
-
- e = strtok_r (s, ",", &next);
- while (e && !use_deflate)
- {
- if (strstr(e, "deflate") != NULL)
- {
- use_deflate = 1;
- use_gzip = 0;
- }
- else if (strstr(e, "gzip") != NULL)
- use_gzip = 1;
- e = strtok_r (NULL, ",", &next);
- }
- free (s);
- }
- s = hdf_get_value (cgi->hdf, "HTTP.UserAgent", NULL);
- if (s)
- {
- if (strstr(s, "MSIE 4") || strstr(s, "MSIE 5") || strstr(s, "MSIE 6"))
- {
- e = hdf_get_value (cgi->hdf, "HTTP.Accept", NULL);
- if (e && !strcmp(e, "*/*"))
- {
- use_deflate = 0;
- use_gzip = 0;
- }
- }
- else
- {
- if (strncasecmp(s, "mozilla/5.", 10))
- {
- use_deflate = 0;
- use_gzip = 0;
- }
- }
- }
- else
- {
- use_deflate = 0;
- use_gzip = 0;
- }
- if (use_deflate)
- {
- err = hdf_set_value (cgi->hdf, "cgiout.other.encoding",
- "Content-Encoding: deflate");
- }
- else if (use_gzip)
- {
- err = hdf_set_value (cgi->hdf, "cgiout.other.encoding",
- "Content-Encoding: gzip");
- }
- if (err != STATUS_OK) return nerr_pass(err);
- }
-#endif
-
- err = cgi_headers(cgi);
- if (err != STATUS_OK) return nerr_pass(err);
-
- if (is_html)
- {
- char buf[50];
- int x;
-
- if (do_timefooter)
- {
- snprintf (buf, sizeof(buf), "\n<!-- %5.3f:%d -->\n",
- dis - cgi->time_start, use_deflate || use_gzip);
- err = string_append (str, buf);
- if (err != STATUS_OK) return nerr_pass(err);
- }
-
- if (ws_strip_level)
- {
- cgi_html_ws_strip(str, ws_strip_level);
- }
-
- if (do_debug)
- {
- err = string_append (str, "<hr>");
- if (err != STATUS_OK) return nerr_pass(err);
- x = 0;
- while (1)
- {
- char *k, *v;
- err = cgiwrap_iterenv (x, &k, &v);
- if (err != STATUS_OK) return nerr_pass(err);
- if (k == NULL) break;
- err =string_appendf (str, "%s = %s<br>", k, v);
- if (err != STATUS_OK) return nerr_pass(err);
- free(k);
- free(v);
- x++;
- }
- err = string_append (str, "<pre>");
- if (err != STATUS_OK) return nerr_pass(err);
- err = hdf_dump_str (cgi->hdf, NULL, 0, str);
- if (err != STATUS_OK) return nerr_pass(err);
- }
- }
-
-#if defined(HTML_COMPRESSION)
- if (is_html && (use_deflate || use_gzip))
- {
- char *dest;
- static int gz_magic[2] = {0x1f, 0x8b}; /* gzip magic header */
- char gz_buf[20]; /* gzip header/footer buffer, len of header is 10 bytes */
- unsigned int crc = 0;
- int len2;
-
- if (use_gzip)
- {
- crc = crc32(0L, Z_NULL, 0);
- crc = crc32(crc, (const Bytef *)(str->buf), str->len);
- }
- len2 = str->len * 2;
- dest = (char *) malloc (sizeof(char) * len2);
- if (dest != NULL)
- {
- do {
- err = cgi_compress (str, dest, &len2);
- if (err == STATUS_OK)
- {
- if (use_gzip)
- {
- /* I'm using sprintf instead of cgiwrap_writef since
- * the wrapper writef might not handle values with
- * embedded NULLs... though I should fix the python one
- * now as well */
- sprintf(gz_buf, "%c%c%c%c%c%c%c%c%c%c", gz_magic[0], gz_magic[1],
- Z_DEFLATED, 0 /*flags*/, 0,0,0,0 /*time*/, 0 /*xflags*/,
- OS_CODE);
- err = cgiwrap_write(gz_buf, 10);
- }
- if (err != STATUS_OK) break;
- err = cgiwrap_write(dest, len2);
- if (err != STATUS_OK) break;
-
- if (use_gzip)
- {
- /* write crc and len in network order */
- sprintf(gz_buf, "%c%c%c%c%c%c%c%c",
- (0xff & (crc >> 0)),
- (0xff & (crc >> 8)),
- (0xff & (crc >> 16)),
- (0xff & (crc >> 24)),
- (0xff & (str->len >> 0)),
- (0xff & (str->len >> 8)),
- (0xff & (str->len >> 16)),
- (0xff & (str->len >> 24)));
- err = cgiwrap_write(gz_buf, 8);
- if (err != STATUS_OK) break;
- }
- }
- else
- {
- nerr_log_error (err);
- err = cgiwrap_write(str->buf, str->len);
- }
- } while (0);
- free (dest);
- }
- else
- {
- err = cgiwrap_write(str->buf, str->len);
- }
- }
- else
-#endif
- {
- err = cgiwrap_write(str->buf, str->len);
- }
-
- return nerr_pass(err);
-}
-
-NEOERR *cgi_html_escape_strfunc(const char *str, char **ret)
-{
- return nerr_pass(html_escape_alloc(str, strlen(str), ret));
-}
-
-NEOERR *cgi_html_strip_strfunc(const char *str, char **ret)
-{
- return nerr_pass(html_strip_alloc(str, strlen(str), ret));
-}
-
-NEOERR *cgi_text_html_strfunc(const char *str, char **ret)
-{
- return nerr_pass(convert_text_html_alloc(str, strlen(str), ret));
-}
-
-NEOERR *cgi_register_strfuncs(CSPARSE *cs)
-{
- NEOERR *err;
-
- err = cs_register_esc_strfunc(cs, "url_escape", cgi_url_escape);
- if (err != STATUS_OK) return nerr_pass(err);
- err = cs_register_esc_strfunc(cs, "html_escape", cgi_html_escape_strfunc);
- if (err != STATUS_OK) return nerr_pass(err);
- err = cs_register_strfunc(cs, "text_html", cgi_text_html_strfunc);
- if (err != STATUS_OK) return nerr_pass(err);
- err = cs_register_esc_strfunc(cs, "js_escape", cgi_js_escape);
- if (err != STATUS_OK) return nerr_pass(err);
- err = cs_register_strfunc(cs, "html_strip", cgi_html_strip_strfunc);
- if (err != STATUS_OK) return nerr_pass(err);
- err = cs_register_esc_strfunc(cs, "url_validate", cgi_url_validate);
- if (err != STATUS_OK) return nerr_pass(err);
- return STATUS_OK;
-}
-
-NEOERR *cgi_cs_init(CGI *cgi, CSPARSE **cs)
-{
- NEOERR *err;
-
- *cs = NULL;
-
- do
- {
- err = cs_init (cs, cgi->hdf);
- if (err != STATUS_OK) break;
- err = cgi_register_strfuncs(*cs);
- if (err != STATUS_OK) break;
- } while (0);
-
- if (err && *cs) cs_destroy(cs);
- return nerr_pass(err);
-}
-
-NEOERR *cgi_display (CGI *cgi, const char *cs_file)
-{
- NEOERR *err = STATUS_OK;
- char *debug;
- CSPARSE *cs = NULL;
- STRING str;
- int do_dump = 0;
- char *t;
-
- string_init(&str);
-
- debug = hdf_get_value (cgi->hdf, "Query.debug", NULL);
- t = hdf_get_value (cgi->hdf, "Config.DumpPassword", NULL);
- if (hdf_get_int_value(cgi->hdf, "Config.DebugEnabled", 0) &&
- debug && t && !strcmp (debug, t)) do_dump = 1;
-
- do
- {
- err = cs_init (&cs, cgi->hdf);
- if (err != STATUS_OK) break;
- err = cgi_register_strfuncs(cs);
- if (err != STATUS_OK) break;
- err = cs_parse_file (cs, cs_file);
- if (err != STATUS_OK) break;
- if (do_dump)
- {
- cgiwrap_writef("Content-Type: text/plain\n\n");
- hdf_dump_str(cgi->hdf, "", 0, &str);
- cs_dump(cs, &str, render_cb);
- cgiwrap_writef("%s", str.buf);
- break;
- }
- else
- {
- err = cs_render (cs, &str, render_cb);
- if (err != STATUS_OK) break;
- }
- err = cgi_output(cgi, &str);
- if (err != STATUS_OK) break;
- } while (0);
-
- cs_destroy(&cs);
- string_clear (&str);
- return nerr_pass(err);
-}
-
-void cgi_neo_error (CGI *cgi, NEOERR *err)
-{
- STRING str;
-
- string_init(&str);
- cgiwrap_writef("Status: 500\n");
- cgiwrap_writef("Content-Type: text/html\n\n");
-
- cgiwrap_writef("<html><body>\nAn error occured:<pre>");
- nerr_error_traceback(err, &str);
- cgiwrap_write(str.buf, str.len);
- cgiwrap_writef("</pre></body></html>\n");
-}
-
-void cgi_error (CGI *cgi, const char *fmt, ...)
-{
- va_list ap;
-
- cgiwrap_writef("Status: 500\n");
- cgiwrap_writef("Content-Type: text/html\n\n");
- cgiwrap_writef("<html><body>\nAn error occured:<pre>");
- va_start (ap, fmt);
- cgiwrap_writevf (fmt, ap);
- va_end (ap);
- cgiwrap_writef("</pre></body></html>\n");
-}
-
-void cgi_debug_init (int argc, char **argv)
-{
- FILE *fp;
- char line[4096];
- char *v, *k;
-
- Argv0 = argv[0];
-
- if (argc)
- {
- fp = fopen(argv[1], "r");
- if (fp == NULL)
- return;
-
- while (fgets(line, sizeof(line), fp) != NULL)
- {
- v = strchr(line, '=');
- if (v != NULL)
- {
- *v = '\0';
- v = neos_strip(v+1);
- k = neos_strip(line);
- cgiwrap_putenv (line, v);
- }
- }
- fclose(fp);
- }
-}
-
-void cgi_vredirect (CGI *cgi, int uri, const char *fmt, va_list ap)
-{
- cgiwrap_writef ("Status: 302\r\n");
- cgiwrap_writef ("Content-Type: text/html\r\n");
- cgiwrap_writef ("Pragma: no-cache\r\n");
- cgiwrap_writef ("Expires: Fri, 01 Jan 1999 00:00:00 GMT\r\n");
- cgiwrap_writef ("Cache-control: no-cache, no-cache=\"Set-Cookie\", private\r\n");
-
- if (uri)
- {
- cgiwrap_writef ("Location: ");
- }
- else
- {
- char *host;
- int https = 0;
-
- if (!strcmp(hdf_get_value(cgi->hdf, "CGI.HTTPS", "off"), "on"))
- {
- https = 1;
- }
-
- host = hdf_get_value (cgi->hdf, "HTTP.Host", NULL);
- if (host == NULL)
- host = hdf_get_value (cgi->hdf, "CGI.ServerName", "localhost");
-
- cgiwrap_writef ("Location: %s://%s", https ? "https" : "http", host);
-
- if ((strchr(host, ':') == NULL)) {
- int port = hdf_get_int_value(cgi->hdf, "CGI.ServerPort", 80);
-
- if (!((https && port == 443) || (!https && port == 80)))
- {
- cgiwrap_writef(":%d", port);
- }
- }
- }
- cgiwrap_writevf (fmt, ap);
- cgiwrap_writef ("\r\n\r\n");
- cgiwrap_writef ("Redirect page<br><br>\n");
-#if 0
- /* Apparently this crashes on some computers... I don't know if its
- * legal to reuse the va_list */
- cgiwrap_writef (" Destination: <A HREF=\"");
- cgiwrap_writevf (fmt, ap);
- cgiwrap_writef ("\">");
- cgiwrap_writevf (fmt, ap);
- cgiwrap_writef ("</A><BR>\n<BR>\n");
-#endif
- cgiwrap_writef ("There is nothing to see here, please move along...");
-
-}
-
-void cgi_redirect (CGI *cgi, const char *fmt, ...)
-{
- va_list ap;
-
- va_start(ap, fmt);
- cgi_vredirect (cgi, 0, fmt, ap);
- va_end(ap);
- return;
-}
-
-void cgi_redirect_uri (CGI *cgi, const char *fmt, ...)
-{
- va_list ap;
-
- va_start(ap, fmt);
- cgi_vredirect (cgi, 1, fmt, ap);
- va_end(ap);
- return;
-}
-
-char *cgi_cookie_authority (CGI *cgi, const char *host)
-{
- HDF *obj;
- char *domain;
- int hlen = 0, dlen = 0;
-
- if (host == NULL)
- {
- host = hdf_get_value (cgi->hdf, "HTTP.Host", NULL);
- }
- if (host == NULL) return NULL;
-
- while (host[hlen] && host[hlen] != ':') hlen++;
-
- obj = hdf_get_obj (cgi->hdf, "CookieAuthority");
- if (obj == NULL) return NULL;
- for (obj = hdf_obj_child (obj);
- obj;
- obj = hdf_obj_next (obj))
- {
- domain = hdf_obj_value (obj);
- dlen = strlen(domain);
- if (hlen >= dlen)
- {
- if (!strncasecmp (host + hlen - dlen, domain, dlen))
- return domain;
- }
- }
-
- return NULL;
-}
-
-/* For more information about Cookies, see:
- * The original Netscape Cookie Spec:
- * http://wp.netscape.com/newsref/std/cookie_spec.html
- *
- * HTTP State Management Mechanism
- * http://www.ietf.org/rfc/rfc2109.txt
- */
-
-NEOERR *cgi_cookie_set (CGI *cgi, const char *name, const char *value,
- const char *path, const char *domain,
- const char *time_str, int persistent, int secure)
-{
- NEOERR *err;
- STRING str;
- char my_time[256];
-
- if (path == NULL) path = "/";
-
- string_init(&str);
- do {
- err = string_appendf(&str, "Set-Cookie: %s=%s; path=%s", name, value, path);
- if (err) break;
-
- if (persistent)
- {
- if (time_str == NULL)
- {
- /* Expires in one year */
- time_t exp_date = time(NULL) + 31536000;
-
- strftime (my_time, 48, "%A, %d-%b-%Y 23:59:59 GMT",
- gmtime (&exp_date));
- time_str = my_time;
- }
- err = string_appendf(&str, "; expires=%s", time_str);
- if (err) break;
- }
- if (domain)
- {
- err = string_appendf(&str, "; domain=%s", domain);
- if (err) break;
- }
- if (secure)
- {
- err = string_append(&str, "; secure");
- if (err) break;
- }
- err = string_append(&str, "\r\n");
- } while (0);
- if (err)
- {
- string_clear(&str);
- return nerr_pass(err);
- }
- cgiwrap_write(str.buf, str.len);
- string_clear(&str);
- return STATUS_OK;
-}
-
-/* This will actually issue up to three set cookies, attempting to clear
- * the damn thing. */
-NEOERR *cgi_cookie_clear (CGI *cgi, const char *name, const char *domain,
- const char *path)
-{
- if (path == NULL) path = "/";
- if (domain)
- {
- if (domain[0] == '.')
- {
- cgiwrap_writef ("Set-Cookie: %s=; path=%s; domain=%s;"
- "expires=Thursday, 01-Jan-1970 00:00:00 GMT\r\n", name, path,
- domain + 1);
- }
- cgiwrap_writef("Set-Cookie: %s=; path=%s; domain=%s;"
- "expires=Thursday, 01-Jan-1970 00:00:00 GMT\r\n", name, path,
- domain);
- }
- cgiwrap_writef("Set-Cookie: %s=; path=%s; "
- "expires=Thursday, 01-Jan-1970 00:00:00 GMT\r\n", name, path);
-
- return STATUS_OK;
-}
diff --git a/cgi/cgi.h b/cgi/cgi.h
deleted file mode 100644
index 550b0af..0000000
--- a/cgi/cgi.h
+++ /dev/null
@@ -1,484 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#ifndef __CGI_H_
-#define __CGI_H_ 1
-
-#include <stdarg.h>
-#include "util/neo_err.h"
-#include "util/neo_hdf.h"
-#include "cs/cs.h"
-
-__BEGIN_DECLS
-
-extern NERR_TYPE CGIFinished;
-extern NERR_TYPE CGIUploadCancelled;
-extern NERR_TYPE CGIParseNotHandled;
-
-/* HACK: Set this value if you want to treat empty CGI Query variables as
- * non-existant.
- */
-extern int IgnoreEmptyFormVars;
-
-typedef struct _cgi CGI;
-
-typedef int (*UPLOAD_CB)(CGI *, int nread, int expected);
-typedef NEOERR* (*CGI_PARSE_CB)(CGI *, char *method, char *ctype, void *rock);
-
-struct _cgi_parse_cb
-{
- char *method;
- int any_method;
- char *ctype;
- int any_ctype;
- void *rock;
- CGI_PARSE_CB parse_cb;
- struct _cgi_parse_cb *next;
-};
-
-struct _cgi
-{
- /* Only public parts of this structure */
- void *data; /* you can store your own information here */
- HDF *hdf; /* the HDF dataset associated with this CGI */
-
- BOOL ignore_empty_form_vars;
-
- UPLOAD_CB upload_cb;
-
- int data_expected;
- int data_read;
- struct _cgi_parse_cb *parse_callbacks;
-
- /* For line oriented reading of form-data input. Used during cgi_init
- * only */
- char *buf;
- int buflen;
- int readlen;
- BOOL found_nl;
- BOOL unget;
- char *last_start;
- int last_length;
- int nl;
-
- /* this is a list of filepointers pointing at files that were uploaded */
- /* Use cgi_filehandle to access these */
- ULIST *files;
-
- /* By default, cgi_parse unlinks uploaded files as it opens them. */
- /* If Config.Upload.Unlink is set to 0, the files are not unlinked */
- /* and there names are stored in this list. */
- /* Use Query.*.FileName to access these */
- ULIST *filenames;
-
- /* keep track of the time between cgi_init and cgi_render */
- double time_start;
- double time_end;
-};
-
-
-/*
- * Function: cgi_init - Initialize ClearSilver CGI environment
- * Description: cgi_init initializes the ClearSilver CGI environment,
- * including creating the HDF data set. It will then import
- * the standard CGI environment variables into that dataset,
- * will parse the QUERY_STRING into the data set, and parse
- * the HTTP_COOKIE into the data set. Note that if the
- * var xdisplay is in the form data, cgi_init will attempt
- * to validate the value and launch the configured debugger
- * on the CGI program. These variables have to be
- * specified in the hdf_file pointed to by hdf_file. The
- * default settings do not allow debugger launching for
- * security reasons.
- * Input: cgi - a pointer to a CGI pointer
- * hdf_file - the path to an HDF data set file that will also be
- * loaded into the dataset. This will likely have to
- * a be a full path, as the HDF search paths are not
- * yet set up. Certain things, like
- * Output: cgi - an allocated CGI struct, including
- * Return: NERR_PARSE - parse error in CGI input
- * NERR_NOMEM - unable to allocate memory
- * NERR_NOT_FOUND - hdf_file doesn't exist
- */
-NEOERR *cgi_init (CGI **cgi, HDF *hdf);
-
-/*
- * Function: cgi_parse - Parse incoming CGI data
- * Description: We split cgi_init into two sections, one that parses
- * just the basics, and the second is cgi_parse. cgi_parse
- * is responsible for parsing the entity body of the HTTP
- * request. This payload is typically only sent (expected)
- * on POST/PUT requests, but generally this is called on
- * all incoming requests. This function walks the list of
- * registered parse callbacks (see cgi_register_parse_cb),
- * and if none of those matches or handles the request, it
- * falls back to the builtin handlers:
- * POST w/ application/x-www-form-urlencoded
- * POST w/ application/form-data
- * PUT w/ any content type
- * In general, if there is no Content-Length, then
- * cgi_parse ignores the payload and doesn't raise an
- * error.
- * Input: cgi - a pointer to a CGI pointer
- * Output: Either data populated into files and cgi->hdf, or whatever
- * other side effects of your own registered callbacks.
- * Return: NERR_PARSE - parse error in CGI input
- * NERR_NOMEM - unable to allocate memory
- * NERR_NOT_FOUND - hdf_file doesn't exist
- * NERR_IO - error reading HDF file or reading CGI stdin, or
- * writing data on multipart/form-data file submission
- * Anything else you raise.
- */
-NEOERR *cgi_parse (CGI *cgi);
-
-/*
- * Function: cgi_register_parse_cb - Register a parse callback
- * Description: The ClearSilver CGI Kit has built-in functionality to handle
- * the following methods:
- * GET -> doesn't have any data except query string, which
- * is processed for all methods
- * POST w/ application/x-www-form-urlencoded
- * POST w/ multipart/form-data
- * processed as RFC2388 data into files and HDF (see
- * cgi_filehandle())
- * PUT (any type)
- * The entire data chunk is stored as a file, with meta
- * data in HDF (similar to single files in RFC2388).
- * The data is accessible via cgi_filehandle with NULL
- * for name.
- * To handle other methods/content types, you have to
- * register your own parse function. This isn't necessary
- * if you aren't expecting any data, and technically HTTP
- * only allows data on PUT/POST requests (and presumably
- * user defined methods). In particular, if you want to
- * implement XML-RPC or SOAP, you'll have to register a
- * callback here to grab the XML data chunk. Usually
- * you'll want to register POST w/ application/xml or POST
- * w/ text/xml (you either need to register both or
- * register POST w/ * and check the ctype yourself,
- * remember to nerr_raise(CGIParseNotHandled) if you aren't
- * handling the POST).
- * In general, your callback should:
- * Find out how much data is available:
- * l = hdf_get_value (cgi->hdf, "CGI.ContentLength", NULL);
- * len = atoi(l);
- * And read/handle all of the data using cgiwrap_read.
- * See the builtin handlers for how this is done. Note
- * that cgiwrap_read is not guarunteed to return all of
- * the data you request (just like fread(3)) since it
- * might be reading of a socket. Sorry.
- * You should be careful when reading the data to watch
- * for short reads (ie, end of file) and cases where the
- * client sends you data ad infinitum.
- * Input: cgi - a CGI struct
- * method - the HTTP method you want to handle, or * for all
- * ctype - the HTTP Content-Type you want to handle, or * for all
- * rock - opaque data that we'll pass to your call back
- * Output: None
- * Return: CGIParseNotHandled if your callback doesn't want to handle
- * this. This causes cgi_parse to continue walking the list of
- * callbacks.
- *
- */
-NEOERR *cgi_register_parse_cb(CGI *cgi, const char *method, const char *ctype,
- void *rock, CGI_PARSE_CB parse_cb);
-
-/*
- * Function: cgi_destroy - deallocate the data associated with a CGI
- * Description: cgi_destroy will destroy all the data associated with a
- * CGI, which mostly means the associated HDF and removal
- * of any files that were uploaded via multipart/form-data.
- * (Note that even in the event of a crash, these files
- * will be deleted, as they were unlinked on creation and
- * only exist because of the open file pointer)
- * Input: cgi - a pointer to a pointer to a CGI struct
- * Output: cgi - NULL on output
- * Return: None
- */
-void cgi_destroy (CGI **cgi);
-
-/*
- * Function: cgi_cs_init - initialize CS parser with the CGI defaults
- * Description: cgi_cs_init initializes a CS parser with the CGI HDF
- * context, and registers the standard CGI filters
- * Input: cgi - a pointer a CGI struct allocated with cgi_init
- * cs - a pointer to a CS struct pointer
- * Output: cs - the allocated/initialized CS struct
- * Return: NERR_NOMEM - no memory was available to render the template
- */
-NEOERR *cgi_cs_init(CGI *cgi, CSPARSE **cs);
-
-/*
- * Function: cgi_display - render and display the CGI output to the user
- * Description: cgi_display will render the CS template pointed to by
- * cs_file using the CGI's HDF data set, and send the
- * output to the user. Note that the output is actually
- * rendered into memory first.
- * Input: cgi - a pointer a CGI struct allocated with cgi_init
- * cs_file - a ClearSilver template file
- * Output: None
- * Return: NERR_IO - an IO error occured during output
- * NERR_NOMEM - no memory was available to render the template
- */
-NEOERR *cgi_display (CGI *cgi, const char *cs_file);
-
-/*
- * Function: cgi_output - display the CGI output to the user
- * Description: Normally, this is called by cgi_display, but some
- * people wanted it external so they could call it
- * directly.
- * Input: cgi - a pointer a CGI struct allocated with cgi_init
- * output - the data to send to output from the CGI
- * Output: None
- * Return: NERR_IO - an IO error occured during output
- * NERR_NOMEM - no memory was available to render the template
- */
-NEOERR *cgi_output (CGI *cgi, STRING *output);
-
-/*
- * Function: cgi_filehandle - return a file pointer to an uploaded file
- * Description: cgi_filehandle will return the stdio FILE pointer
- * associated with a file that was uploaded using
- * multipart/form-data. The FILE pointer is positioned at
- * the start of the file when first available.
- * Input: cgi - a pointer to a CGI struct allocated with cgi_init
- * form_name - the form name that the file was uploaded as
- * (not the filename) (if NULL, we're asking for the
- * file handle for the PUT upload)
- * Output: None
- * Return: A stdio FILE pointer, or NULL if an error occurs (usually
- * indicates that the form_name wasn't found, but might indicate
- * a problem with the HDF dataset)
- */
-FILE *cgi_filehandle (CGI *cgi, const char *form_name);
-
-/*
- * Function: cgi_neo_error - display a NEOERR call backtrace
- * Description: cgi_neo_error will output a 500 error containing the
- * NEOERR call backtrace. This function is likely to be
- * removed from future versions in favor of some sort of
- * user error mechanism.
- * Input: cgi - a pointer to a CGI struct
- * err - a NEOERR (see util/neo_err.h for details)
- * Output: None
- * Return: None
- */
-void cgi_neo_error (CGI *cgi, NEOERR *err);
-
-/*
- * Function: cgi_error - display an error string to the user
- * Description: cgi_error will output a 500 error containing the
- * specified error message. This function is likely to be
- * removed from future versions in favor of a user error
- * mechanism.
- * Input: cgi - a pointer to a CGI struct
- * fmt - printf style format string and arguments
- * Output: None
- * Return: None
- */
-void cgi_error (CGI *cgi, const char *fmt, ...)
- ATTRIBUTE_PRINTF(2,3);
-
-/*
- * Function: cgi_debug_init - initialize standalone debugging
- * Description: cgi_debug_init initializes a CGI program for standalone
- * debugging. By running a ClearSilver CGI program with a
- * filename on the command line as the first argument, the
- * CGI program will load that file of the form K=V as a set
- * of HTTP/CGI environment variables. This allows you to
- * run the program under a debugger in a reproducible
- * environment.
- * Input: argc/argv - the arguments from main
- * Output: None
- * Return: None
- */
-void cgi_debug_init (int argc, char **argv);
-
-/*
- * Function: cgi_url_escape - url escape a string
- * Description: cgi_url_escape will do URL escaping on the passed in
- * string, and return a newly allocated string that is escaped.
- * Characters which are escaped include control characters,
- * %, ?, +, space, =, &, /, and "
- * Input: buf - a 0 terminated string
- * Output: esc - a newly allocated string
- * Return: NERR_NOMEM - no memory available to allocate the escaped string
- */
-NEOERR *cgi_url_escape (const char *buf, char **esc);
-
-/*
- * Function: cgi_url_escape_more - url escape a string
- * Description: cgi_url_escape_more will do URL escaping on the passed in
- * string, and return a newly allocated string that is escaped.
- * Characters which are escaped include control characters,
- * %, ?, +, space, =, &, /, and " and any characters in
- * other
- * Input: buf - a 0 terminated string
- * other - a 0 terminated string of characters to escape
- * Output: esc - a newly allocated string
- * Return: NERR_NOMEM - no memory available to allocate the escaped string
- */
-NEOERR *cgi_url_escape_more (const char *buf, char **esc, const char *other);
-
-/*
- * Function: cgi_url_validate - validate that url is of an allowed format
- * Description: cgi_url_validate will check that a URL starts with
- * one of the accepted safe schemes.
- * If not, it returns "#" as a safe substitute.
- * Currently accepted schemes are http, https, ftp and mailto.
- * It then html escapes the entire URL so that it is safe to
- * insert in an href attribute.
- * Input: buf - a 0 terminated string
- * Output: esc - a newly allocated string
- * Return: NERR_NOMEM - no memory available to allocate the escaped string
- */
-NEOERR *cgi_url_validate (const char *buf, char **esc);
-
-/*
- * Function: cgi_url_unescape - unescape an url encoded string
- * Description: cgi_url_unescape will do URL unescaping on the passed in
- * string. This function modifies the string in place
- * This function will decode any %XX character, and will
- * decode + as space
- * Input: buf - a 0 terminated string
- * Return: pointer to same buf
- */
-char *cgi_url_unescape (char *buf);
-
-/*
- * Function: cgi_redirect - send an HTTP 302 redirect response
- * Description: cgi_redirect will redirect the user to another page on
- * your site. This version takes only the path portion of
- * the URL. As with all printf style commands, you should
- * not call this with arbitrary input that may contain %
- * characters, if you are forwarding something directly,
- * use a format like cgi_redirect (cgi, "%s", buf)
- * Input: cgi - cgi struct
- * fmt - printf style format with args
- * Output: None
- * Return: None
- */
-void cgi_redirect (CGI *cgi, const char *fmt, ...)
- ATTRIBUTE_PRINTF(2,3);
-
-/*
- * Function: cgi_redirect_uri - send an HTTP 302 redirect response
- * Description: cgi_redirect_uri will redirect the user to another page on
- * your site. This version takes the full URL, including
- * protocol/domain/port/path.
- * As with all printf style commands, you should
- * not call this with arbitrary input that may contain %
- * characters, if you are forwarding something directly,
- * use a format like cgi_redirect (cgi, "%s", buf)
- * Input: cgi - cgi struct
- * fmt - printf style format with args
- * Output: None
- * Return: None
- */
-void cgi_redirect_uri (CGI *cgi, const char *fmt, ...)
- ATTRIBUTE_PRINTF(2,3);
-
-/*
- * Function: cgi_vredirect - send an HTTP 302 redirect response
- * Description: cgi_vredirect is mostly used internally, but can be used
- * if you need a varargs version of the function.
- * Input: cgi - cgi struct
- * uri - whether the URL is full (1) or path only (0)
- * fmt - printf format string
- * ap - stdarg va_list
- * Output: None
- * Return: None
- */
-void cgi_vredirect (CGI *cgi, int uri, const char *fmt, va_list ap);
-
-
-/*
- * Function: cgi_cookie_authority - determine the cookie authority for a
- * domain
- * Description: cgi_cookie_authority will walk the CookieAuthority
- * portion of the CGI HDF data set, and return the matching
- * domain if it exists. The purpose of this is so that you
- * set domain specific cookies. For instance, you might
- * have
- * CookieAuthority.0 = neotonic.com
- * In which case, any webserver using a hostname ending in
- * neotonic.com will generate a cookie authority of
- * neotonic.com.
- * Input: cgi - a CGI struct
- * host - optional host to match against. If NULL, the function
- * will use the HTTP.Host HDF variable.
- * Output: None
- * Return: The authority domain, or NULL if none found.
- */
-char *cgi_cookie_authority (CGI *cgi, const char *host);
-
-/*
- * Function: cgi_cookie_set - Set a browser Cookie
- * Description: cgi_cookie_set will issue a Set-Cookie header that
- * should cause a browser to return a cookie when required.
- * Note this function does no escaping of anything, you
- * have to take care of that first.
- * Input: cgi - a CGI struct
- * name - the name of the cookie
- * value - the value to set the cookie to.
- * path - optional path for which the cookie is valid. Default
- * is /
- * domain - optional domain for which the cookie is valid. You
- * can use cgi_cookie_authority to determine this
- * domain. Default is none, which is interpreted by
- * the browser as the sending domain only.
- * time_str - expiration time string in the following format
- * Wdy, DD-Mon-YYYY HH:MM:SS GMT. Only used if
- * persistent. Default is one year from time of call.
- * persistent - cookie will be stored by the browser between sessions
- * secure - cookie will only be sent over secure connections
- * Output: None
- * Return: NERR_IO
- */
-NEOERR *cgi_cookie_set (CGI *cgi, const char *name, const char *value,
- const char *path, const char *domain,
- const char *time_str, int persistent, int secure);
-
-/*
- * Function: cgi_cookie_clear - clear browser cookie
- * Description: cgi_cookie_clear will send back a Set-Cookie string that
- * will attempt to stop a browser from continuing to send
- * back a cookie. Note that the cookie has to match in
- * name, domain, and path, and the luck of the Irish has to
- * be with you for this work all the time, but at the least
- * it will make the browser send back a cookie with no
- * value, which the ClearSilver cookie parsing code will
- * ignore.
- * Input: cgi - a CGI struct
- * name - the cookie name to clear
- * domain - the domain to clear, NULL for none
- * path - the cookie's path
- * Output: None
- * Return: NERR_IO
- */
-NEOERR *cgi_cookie_clear (CGI *cgi, const char *name, const char *domain,
- const char *path);
-
-/* not documented *yet* */
-NEOERR *cgi_text_html_strfunc(const char *str, char **ret);
-NEOERR *cgi_html_strip_strfunc(const char *str, char **ret);
-NEOERR *cgi_html_escape_strfunc(const char *str, char **ret);
-NEOERR *cgi_js_escape (const char *buf, char **esc);
-void cgi_html_ws_strip(STRING *str, int level);
-NEOERR *cgi_register_strfuncs(CSPARSE *cs);
-
-/* internal use only */
-NEOERR * parse_rfc2388 (CGI *cgi);
-NEOERR * open_upload(CGI *cgi, int unlink_files, FILE **fpw);
-
-__END_DECLS
-
-#endif /* __CGI_H_ */
diff --git a/cgi/cgi_cstest.c b/cgi/cgi_cstest.c
deleted file mode 100644
index db63836..0000000
--- a/cgi/cgi_cstest.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#include "ClearSilver.h"
-
-#include <stdio.h>
-#include <string.h>
-
-static NEOERR *output (void *ctx, char *s)
-{
- printf ("%s", s);
- return STATUS_OK;
-}
-
-int main (int argc, char *argv[])
-{
- NEOERR *err;
- CSPARSE *parse;
- HDF *hdf;
- int verbose = 0;
- char *hdf_file, *cs_file;
-
- if (argc < 3)
- {
- ne_warn ("Usage: cstest [-v] <file.hdf> <file.cs>");
- return -1;
- }
-
- if (!strcmp(argv[1], "-v"))
- {
- verbose = 1;
- if (argc < 4)
- {
- ne_warn ("Usage: cstest [-v] <file.hdf> <file.cs>");
- return -1;
- }
- hdf_file = argv[2];
- cs_file = argv[3];
- }
- else
- {
- hdf_file = argv[1];
- cs_file = argv[2];
- }
-
- err = hdf_init(&hdf);
- if (err != STATUS_OK)
- {
- nerr_log_error(err);
- return -1;
- }
- err = hdf_read_file(hdf, hdf_file);
- if (err != STATUS_OK)
- {
- nerr_log_error(err);
- return -1;
- }
-
- printf ("Parsing %s\n", cs_file);
- err = cs_init (&parse, hdf);
- if (err != STATUS_OK)
- {
- nerr_log_error(err);
- return -1;
- }
- err = cgi_register_strfuncs(parse);
- if (err != STATUS_OK)
- {
- nerr_log_error(err);
- return -1;
- }
-
- err = cs_parse_file (parse, cs_file);
- if (err != STATUS_OK)
- {
- err = nerr_pass(err);
- nerr_log_error(err);
- return -1;
- }
-
- err = cs_render(parse, NULL, output);
- if (err != STATUS_OK)
- {
- err = nerr_pass(err);
- nerr_log_error(err);
- return -1;
- }
-
- if (verbose)
- {
- printf ("\n-----------------------\nCS DUMP\n");
- err = cs_dump(parse, NULL, output);
- }
-
- cs_destroy (&parse);
-
- if (verbose)
- {
- printf ("\n-----------------------\nHDF DUMP\n");
- hdf_dump (hdf, NULL);
- }
- hdf_destroy(&hdf);
-
-
- return 0;
-}
diff --git a/cgi/cgiwrap.c b/cgi/cgiwrap.c
deleted file mode 100644
index 4e55b47..0000000
--- a/cgi/cgiwrap.c
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#include "cs_config.h"
-
-#if HAVE_FEATURES_H
-#include <features.h>
-#endif
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "util/neo_misc.h"
-#include "util/neo_err.h"
-#include "cgi/cgiwrap.h"
-
-typedef struct _cgiwrapper
-{
- int argc;
- char **argv;
- char **envp;
- int env_count;
-
- READ_FUNC read_cb;
- WRITEF_FUNC writef_cb;
- WRITE_FUNC write_cb;
- GETENV_FUNC getenv_cb;
- PUTENV_FUNC putenv_cb;
- ITERENV_FUNC iterenv_cb;
-
- void *data;
- int emu_init;
-} CGIWRAPPER;
-
-static CGIWRAPPER GlobalWrapper = {0, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0};
-
-void cgiwrap_init_std (int argc, char **argv, char **envp)
-{
- /* Allow setting of these even after cgiwrap_init_emu is called */
- GlobalWrapper.argc = argc;
- GlobalWrapper.argv = argv;
- GlobalWrapper.envp = envp;
- GlobalWrapper.env_count = 0;
- while (envp[GlobalWrapper.env_count] != NULL) GlobalWrapper.env_count++;
-
- /* so you can compile the same code for embedded without mods.
- * Note that this setting is global for the lifetime of the program, so
- * you can never reset these values after calling cgiwrap_init_emu by
- * calling cgiwrap_init_std, you'll have to call cgiwrap_init_emu with NULL
- * values to reset */
- if (GlobalWrapper.emu_init) return;
-
- GlobalWrapper.read_cb = NULL;
- GlobalWrapper.writef_cb = NULL;
- GlobalWrapper.write_cb = NULL;
- GlobalWrapper.getenv_cb = NULL;
- GlobalWrapper.putenv_cb = NULL;
- GlobalWrapper.iterenv_cb = NULL;
- GlobalWrapper.data = NULL;
-}
-
-void cgiwrap_init_emu (void *data, READ_FUNC read_cb,
- WRITEF_FUNC writef_cb, WRITE_FUNC write_cb, GETENV_FUNC getenv_cb,
- PUTENV_FUNC putenv_cb, ITERENV_FUNC iterenv_cb)
-{
- /* leave argc, argv, envp, env_count alone since we either don't use them, or
- * they are used by the default versions if any of these are passed as NULL.
- * Note that means that if you pass NULL for anything here, you'd better
- * have called cgiwrap_init_std first! */
- GlobalWrapper.data = data;
- GlobalWrapper.read_cb = read_cb;
- GlobalWrapper.writef_cb = writef_cb;
- GlobalWrapper.write_cb = write_cb;
- GlobalWrapper.getenv_cb = getenv_cb;
- GlobalWrapper.putenv_cb = putenv_cb;
- GlobalWrapper.iterenv_cb = iterenv_cb;
- GlobalWrapper.emu_init = 1;
-}
-
-NEOERR *cgiwrap_getenv (const char *k, char **v)
-{
- if (GlobalWrapper.getenv_cb != NULL)
- {
- *v = GlobalWrapper.getenv_cb (GlobalWrapper.data, k);
- }
- else
- {
- char *s = getenv(k);
-
- if (s != NULL)
- {
- *v = strdup(s);
- if (*v == NULL)
- {
- return nerr_raise (NERR_NOMEM, "Unable to duplicate env var %s=%s",
- k, s);
- }
- }
- else
- {
- *v = NULL;
- }
- }
- return STATUS_OK;
-}
-
-NEOERR *cgiwrap_putenv (const char *k, const char *v)
-{
- if (GlobalWrapper.putenv_cb != NULL)
- {
- if (GlobalWrapper.putenv_cb(GlobalWrapper.data, k, v))
- return nerr_raise(NERR_NOMEM, "putenv_cb says nomem when %s=%s", k, v);
- }
- else
- {
- char *buf;
- int l;
- l = strlen(k) + strlen(v) + 2;
- buf = (char *) malloc(sizeof(char) * l);
- if (buf == NULL)
- return nerr_raise(NERR_NOMEM, "Unable to allocate memory for putenv %s=%s", k, v);
- snprintf (buf, l, "%s=%s", k, v);
- if (putenv (buf))
- return nerr_raise(NERR_NOMEM, "putenv says nomem when %s", buf);
- }
- return STATUS_OK;
-}
-
-NEOERR *cgiwrap_iterenv (int num, char **k, char **v)
-{
- *k = NULL;
- *v = NULL;
- if (GlobalWrapper.iterenv_cb != NULL)
- {
- int r;
-
- r = GlobalWrapper.iterenv_cb(GlobalWrapper.data, num, k, v);
- if (r)
- return nerr_raise(NERR_SYSTEM, "iterenv_cb returned %d", r);
- }
- else if (GlobalWrapper.envp != NULL && num < GlobalWrapper.env_count)
- {
- char *c, *s = GlobalWrapper.envp[num];
-
- c = strchr (s, '=');
- if (c == NULL) return STATUS_OK;
- *c = '\0';
- *k = strdup(s);
- *c = '=';
- if (*k == NULL)
- return nerr_raise(NERR_NOMEM, "iterenv says nomem for %s", s);
- *v = strdup(c+1);
- if (*v == NULL)
- {
- free(*k);
- *k = NULL;
- return nerr_raise(NERR_NOMEM, "iterenv says nomem for %s", s);
- }
- }
- return STATUS_OK;
-}
-
-NEOERR *cgiwrap_writef (const char *fmt, ...)
-{
- va_list ap;
-
- va_start (ap, fmt);
- cgiwrap_writevf (fmt, ap);
- va_end (ap);
- return STATUS_OK;
-}
-
-NEOERR *cgiwrap_writevf (const char *fmt, va_list ap)
-{
- int r;
-
- if (GlobalWrapper.writef_cb != NULL)
- {
- r = GlobalWrapper.writef_cb (GlobalWrapper.data, fmt, ap);
- if (r)
- return nerr_raise_errno (NERR_IO, "writef_cb returned %d", r);
- }
- else
- {
- vprintf (fmt, ap);
- /* vfprintf(stderr, fmt, ap); */
- }
- return STATUS_OK;
-}
-
-NEOERR *cgiwrap_write (const char *buf, int buf_len)
-{
- int r;
-
- if (GlobalWrapper.write_cb != NULL)
- {
- r = GlobalWrapper.write_cb (GlobalWrapper.data, buf, buf_len);
- if (r != buf_len)
- return nerr_raise_errno (NERR_IO, "write_cb returned %d<%d", r, buf_len);
- }
- else
- {
- /* r = fwrite(buf, sizeof(char), buf_len, stderr); */
- r = fwrite(buf, sizeof(char), buf_len, stdout);
- if (r != buf_len)
- return nerr_raise_errno (NERR_IO, "fwrite returned %d<%d", r, buf_len);
- }
- return STATUS_OK;
-}
-
-void cgiwrap_read (char *buf, int buf_len, int *read_len)
-{
- if (GlobalWrapper.read_cb != NULL)
- {
- *read_len = GlobalWrapper.read_cb (GlobalWrapper.data, buf, buf_len);
- }
- else
- {
-#ifdef __UCLIBC__
- /* According to
- * http://cvs.uclinux.org/cgi-bin/cvsweb.cgi/uClibc/libc/stdio/stdio.c#rev1.28
- * Note: there is a difference in behavior between glibc and uClibc here
- * regarding fread() on a tty stream. glibc's fread() seems to return
- * after reading all _available_ data even if not at end-of-file, while
- * uClibc's fread() continues reading until all requested or eof or error.
- * The latter behavior seems correct w.r.t. the standards.
- *
- * So, we use read on uClibc. This may be required on other platforms as
- * well. Using raw and buffered i/o interchangeably can be problematic,
- * but everyone should be going through the cgiwrap interfaces which only
- * provide this one read function.
- */
- *read_len = read (fileno(stdin), buf, buf_len);
-#else
- *read_len = fread (buf, sizeof(char), buf_len, stdin);
-#endif
- }
-}
diff --git a/cgi/cgiwrap.h b/cgi/cgiwrap.h
deleted file mode 100644
index b4962ea..0000000
--- a/cgi/cgiwrap.h
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-/*
- * cgiwrap.h
- * The purpose of the cgiwrap is to abstract the CGI interface to allow
- * for other than the default implementation. The default
- * implementation is of course based on environment variables and stdio,
- * but this can be used with server modules which can substitute their
- * own implementation of these functions.
- */
-
-
-#ifndef __CGIWRAP_H_
-#define __CGIWRAP_H_ 1
-
-#include <stdarg.h>
-#include "util/neo_err.h"
-
-__BEGIN_DECLS
-
-typedef int (*READ_FUNC)(void *, char *, int);
-typedef int (*WRITEF_FUNC)(void *, const char *, va_list);
-typedef int (*WRITE_FUNC)(void *, const char *, int);
-typedef char *(*GETENV_FUNC)(void *, const char *);
-typedef int (*PUTENV_FUNC)(void *, const char *, const char *);
-typedef int (*ITERENV_FUNC)(void *, int, char **, char **);
-
-/*
- * Function: cgiwrap_init_std - Initialize cgiwrap with default functions
- * Description: cgiwrap_init_std will initialize the cgiwrap subsystem
- * to use the default CGI functions, ie
- * getenv/putenv/stdio. In reality, all this is doing is
- * setting up the data for the cgiwrap_iterenv() function.
- * Input: the arguments to main, namely argc/argv/envp
- * Output: None
- * Returns: None
- */
-void cgiwrap_init_std (int argc, char **argv, char **envp);
-
-/*
- * Function: cgiwrap_init_emu - initialize cgiwrap for emulated use
- * Description: cgiwrap_init_emu sets up the cgiwrap subsystem for use
- * in an emulated environment where you are providing
- * routines to use in place of the standard routines, ie
- * when used to interface with a server or scripting
- * language.
- * See cgi/cgiwrap.h for the exact definitions of the
- * callback functions.
- * Input: data - user data to be passed to the specified callbacks
- * read_cb - a cb to replace fread(stdin)
- * writef_cb - a cb to repalce fprintf(stdout)
- * write_cb - a cb to replace fwrite(stdout)
- * getenv_cb - a cb to replace getenv
- * putenv_cb - a cb to replace putenv
- * iterenv_cb - a cb to replace the default environment iteration
- * function (which just wraps walking the envp array)
- * Output: None
- * Returns: None
- */
-void cgiwrap_init_emu (void *data, READ_FUNC read_cb,
- WRITEF_FUNC writef_cb, WRITE_FUNC write_cb, GETENV_FUNC getenv_cb,
- PUTENV_FUNC putenv_cb, ITERENV_FUNC iterenv_cb);
-
-/*
- * Function: cgiwrap_getenv - the wrapper for getenv
- * Description: cgiwrap_getenv wraps the getenv function for access to
- * environment variables, which are used to pass data to
- * CGI scripts. This version differs from the system
- * getenv in that it makes a copy of the value it returns,
- * which gets around problems when wrapping this routine in
- * garbage collected/reference counted languages by
- * moving the ownership of the data to the calling
- * function.
- * Input: k - the environment variable to lookup
- * Output: v - a newly allocated copy of the value of that variable, or
- * NULL if not found.
- * Returns: NERR_NOMEM if there isn't memory available to allocate the result
- */
-NEOERR *cgiwrap_getenv (const char *k, char **v);
-
-/*
- * Function: cgiwrap_putenv - wrap the putenv call
- * Description: cgiwrap_putenv wraps the putenv call. This is mostly
- * used by the cgi_debug_init function to create an
- * artificial environment. This version differs from the
- * system version by having separate arguments for the
- * variable name and value, which makes life easier for the
- * caller (usually), and keeps most wrapping callbacks from
- * having to implement a parser to separate them.
- * Input: k - the env var name
- * v - the new value for env var k
- * Output: None
- * Returns: NERR_NOMEM
- */
-NEOERR *cgiwrap_putenv (const char *k, const char *v);
-
-/*
- * Function: cgiwrap_iterenv - iterater for env vars
- * Description: cgiwrap_iterenv allows a program to iterate over all the
- * environment variables. This is probably mostly used by
- * the default debug output.
- * Input: n - variable to return. This should start at 0 and increment
- * until you receive a NULL return value.
- * Output: k - a malloc'd copy of the variable name
- * v - a malloc'd copy of the variable value
- * Returns: NERR_NOMEM
- */
-NEOERR *cgiwrap_iterenv (int n, char **k, char **v);
-
-/*
- * Function: cgiwrap_writef - a wrapper for printf
- * Description: cgiwrap_writef is the formatted output command that
- * replaces printf or fprintf(stdout) in a standard CGI
- * Input: fmt - standard printf fmt string and args
- * Output: None
- * Returns: NERR_SYSTEM
- */
-NEOERR *cgiwrap_writef (const char *fmt, ...)
- ATTRIBUTE_PRINTF(1,2);
-
-/*
- * Function: cgiwrap_writevf - a wrapper for vprintf
- * Description: cgiwrap_writevf is the formatted output command that
- * replaces vprintf or fvprintf(stdout) in a standard CGI
- * It is also used by cgiwrap_writef (the actual wrapped
- * function is a v type function)
- * Input: fmt - standard printf fmt string
- * ap - stdarg argument pointer
- * Output: None
- * Returns: NERR_SYSTEM
- */
-NEOERR *cgiwrap_writevf (const char *fmt, va_list ap);
-
-/*
- * Function: cgiwrap_write - wrapper for the fwrite(stdout)
- * Description: cgiwrap_write is the block data output function for
- * cgiwrap that replaces fwrite(stdout) in regular CGIs
- * Input: buf - a character buffer
- * buf_len - the length of the buffer in buf
- * Output: None
- * Returns: NERR_IO
- */
-NEOERR *cgiwrap_write (const char *buf, int buf_len);
-
-/*
- * Function: cgiwrap_read - cgiwrap input function
- * Description: cgiwrap_read is used to read incoming data from the
- * client, usually from a POST or PUT HTTP request. It
- * wraps the part of fread(stdin).
- * Input: buf - a pre-allocated buffer to read the data into
- * buf_len - the size of the pre-allocated buffer
- * Output: read_len - the number of bytes read into buf
- * Returns: None
- */
-void cgiwrap_read (char *buf, int buf_len, int *read_len);
-
-__END_DECLS
-
-#endif /* __CGIWRAP_H_ */
diff --git a/cgi/date.c b/cgi/date.c
deleted file mode 100644
index 23b1af5..0000000
--- a/cgi/date.c
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#include "cs_config.h"
-
-#include <time.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include "util/neo_misc.h"
-#include "util/neo_err.h"
-#include "util/neo_hdf.h"
-#include "util/neo_date.h"
-#include "cgi.h"
-#include "date.h"
-
-/*
- * prefix.sec
- * prefix.min
- * prefix.hour - 12 hour
- * prefix.am - 1 if AM
- * prefix.24hour - 24 hour
- * prefix.mday
- * prefix.mon - numeric month
- * prefix.year - full year (ie, 4 digits)
- * prefix.2yr - year (2 digits)
- * prefix.wday - day of the week
- * prefix.tzoffset - hhmm from UTC
- *
- */
-
-NEOERR *export_date_tm (HDF *data, const char *prefix, struct tm *ttm)
-{
- NEOERR *err;
- HDF *obj;
- int hour, am = 1;
- char buf[256];
- int tzoffset_seconds = 0;
- int tzoffset = 0;
- char tzsign = '+';
-
- obj = hdf_get_obj (data, prefix);
- if (obj == NULL)
- {
- err = hdf_set_value (data, prefix, "");
- if (err) return nerr_pass(err);
- obj = hdf_get_obj (data, prefix);
- }
-
- snprintf (buf, sizeof(buf), "%02d", ttm->tm_sec);
- err = hdf_set_value (obj, "sec", buf);
- if (err) return nerr_pass(err);
- snprintf (buf, sizeof(buf), "%02d", ttm->tm_min);
- err = hdf_set_value (obj, "min", buf);
- if (err) return nerr_pass(err);
- snprintf (buf, sizeof(buf), "%02d", ttm->tm_hour);
- err = hdf_set_value (obj, "24hour", buf);
- if (err) return nerr_pass(err);
- hour = ttm->tm_hour;
- if (hour == 0)
- {
- hour = 12;
- }
- else if (hour == 12)
- {
- am = 0;
- }
- else if (hour > 12)
- {
- am = 0;
- hour -= 12;
- }
- err = hdf_set_int_value (obj, "hour", hour);
- if (err) return nerr_pass(err);
- err = hdf_set_int_value (obj, "am", am);
- if (err) return nerr_pass(err);
- err = hdf_set_int_value (obj, "mday", ttm->tm_mday);
- if (err) return nerr_pass(err);
- err = hdf_set_int_value (obj, "mon", ttm->tm_mon + 1);
- if (err) return nerr_pass(err);
- err = hdf_set_int_value (obj, "year", ttm->tm_year + 1900);
- if (err) return nerr_pass(err);
- snprintf(buf, sizeof(buf), "%02d", ttm->tm_year % 100);
- err = hdf_set_value (obj, "2yr", buf);
- if (err) return nerr_pass(err);
- err = hdf_set_int_value (obj, "wday", ttm->tm_wday);
- if (err) return nerr_pass(err);
- // neo_tz_offset() returns offset from GMT in seconds
- tzoffset_seconds = neo_tz_offset(ttm);
- tzoffset = tzoffset_seconds / 60;
- if (tzoffset < 0)
- {
- tzoffset *= -1;
- tzsign = '-';
- }
- snprintf(buf, sizeof(buf), "%c%02d%02d", tzsign, tzoffset / 60, tzoffset % 60);
- err = hdf_set_value (obj, "tzoffset", buf);
- if (err) return nerr_pass(err);
-
- return STATUS_OK;
-}
-
-NEOERR *export_date_time_t (HDF *data, const char *prefix, const char *timezone,
- time_t tt)
-{
- struct tm ttm;
-
- neo_time_expand (tt, timezone, &ttm);
- return nerr_pass (export_date_tm (data, prefix, &ttm));
-}
-
-/* from httpd util.c : made infamous with Roy owes Rob beer. */
-static char *months[] = {
- "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"
-};
-
-int find_month(char *mon) {
- register int x;
-
- for(x=0;x<12;x++)
- if(!strcmp(months[x],mon))
- return x;
- return -1;
-}
-
-int later_than(struct tm *lms, char *ims) {
- char *ip;
- char mname[256];
- int year = 0, month = 0, day = 0, hour = 0, min = 0, sec = 0, x;
-
- /* Whatever format we're looking at, it will start
- * with weekday. */
- /* Skip to first space. */
- if(!(ip = strchr(ims,' ')))
- return 0;
- else
- while(isspace(*ip))
- ++ip;
-
- if(isalpha(*ip)) {
- /* ctime */
- sscanf(ip,"%25s %d %d:%d:%d %d",mname,&day,&hour,&min,&sec,&year);
- }
- else if(ip[2] == '-') {
- /* RFC 850 (normal HTTP) */
- char t[256];
- sscanf(ip,"%s %d:%d:%d",t,&hour,&min,&sec);
- t[2] = '\0';
- day = atoi(t);
- t[6] = '\0';
- strcpy(mname,&t[3]);
- x = atoi(&t[7]);
- /* Prevent
- * wraparound
- * from
- * ambiguity
- * */
- if(x < 70)
- x += 100;
- year = 1900 + x;
- }
- else {
- /* RFC 822 */
- sscanf(ip,"%d %s %d %d:%d:%d",&day,mname,&year,&hour,&min,&sec);
- }
- month = find_month(mname);
-
- if((x = (1900+lms->tm_year) - year))
- return x < 0;
- if((x = lms->tm_mon - month))
- return x < 0;
- if((x = lms->tm_mday - day))
- return x < 0;
- if((x = lms->tm_hour - hour))
- return x < 0;
- if((x = lms->tm_min - min))
- return x < 0;
- if((x = lms->tm_sec - sec))
- return x < 0;
-
- return 1;
-}
-
diff --git a/cgi/date.h b/cgi/date.h
deleted file mode 100644
index cdd29f3..0000000
--- a/cgi/date.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#ifndef __DATE_H_
-#define __DATE_H_ 1
-
-#include <time.h>
-
-__BEGIN_DECLS
-
-NEOERR *export_date_tm (HDF *obj, const char *prefix, struct tm *ttm);
-NEOERR *export_date_time_t (HDF *obj, const char *prefix, const char *timezone,
- time_t tt);
-
-__END_DECLS
-
-#endif /* __DATE_H_ */
diff --git a/cgi/fcgi_hello.c b/cgi/fcgi_hello.c
deleted file mode 100644
index defecf7..0000000
--- a/cgi/fcgi_hello.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * Copyright 2006 Mike Tsao. All rights reserved.
- *
- * Hello World using FastCGI and ClearSilver.
- */
-
-#include "ClearSilver.h"
-#include <string>
-#include <fcgi_stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <syslog.h>
-
-static bool quit = false;
-
-static int cs_printf(void *ctx, const char *s, va_list args) {
- return printf(s, args);
-}
-
-static int cs_write(void *ctx, const char *s, int n) {
- return fwrite(const_cast<char *>(s), n, 1, FCGI_stdout);
-}
-
-int main(int argc, char **argv, char **envp) {
- openlog(argv[0], 0, LOG_USER);
- syslog(LOG_INFO, "%s started.", argv[0]);
-
- int hits = 0;
- while (FCGI_Accept() >= 0) {
- HDF *hdf = NULL;
- CGI *cgi = NULL;
-
- /* Note that we aren't doing any error handling here, we really should. */
- hdf_init(&hdf);
-
- // Takes ownership of HDF.
- cgi_init(&cgi, hdf);
-
- hits++;
-
- /* Initialize the standard cgiwrap environment. FastCGI already wraps some
- * of the standard calls that cgiwrap wraps. */
- cgiwrap_init_std(argc, argv, environ);
-
- /* Then, we install our own wrappers for some cgiwrap calls that aren't
- * already wrapped in the standard wrappers. */
- cgiwrap_init_emu(NULL, NULL, cs_printf, cs_write, NULL, NULL, NULL);
-
- hdf_read_file(cgi->hdf, "common.hdf");
- hdf_read_file(cgi->hdf, "hello_world.hdf");
-
- cgi_display(cgi, "hello_world.cs");
-
- // This destroys HDF.
- cgi_destroy(&cgi);
- }
- syslog(LOG_INFO, "%s ending.", argv[0]);
- return 0;
-}
diff --git a/cgi/html.c b/cgi/html.c
deleted file mode 100644
index 64339c4..0000000
--- a/cgi/html.c
+++ /dev/null
@@ -1,802 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#include "cs_config.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-#include <regex.h>
-#include <ctype.h>
-#include "util/neo_misc.h"
-#include "util/neo_err.h"
-#include "util/neo_str.h"
-#include "html.h"
-#include "cgi.h"
-
-static int has_space_formatting(const char *src, int slen)
-{
- int spaces = 0;
- int returns = 0;
- int ascii_art = 0;
- int x = 0;
-
- for (x = 0; x < slen; x++)
- {
- if (src[x] == '\t') return 1;
- if (src[x] == ' ')
- {
- spaces++;
- if (x && (src[x-1] == '.'))
- spaces--;
- }
- else if (src[x] == '\n')
- {
- spaces = 0;
- returns++;
- }
- else if (strchr ("/\\<>:[]!@#$%^&*()|", src[x]))
- {
- ascii_art++;
- if (ascii_art > 3) return 2;
- }
- else if (src[x] != '\r')
- {
- if (returns > 2) return 1;
- if (spaces > 2) return 1;
- returns = 0;
- spaces = 0;
- ascii_art = 0;
- }
- }
-
- return 0;
-}
-
-/*
-static int has_long_lines (char *s, int l)
-{
- char *ptr;
- int x = 0;
-
- while (x < l)
- {
- ptr = strchr (s + x, '\n');
- if (ptr == NULL)
- {
- if (l - x > 75) return 1;
- return 0;
- }
- if (ptr - (s + x) > 75) return 1;
- x = ptr - s + 1;
- }
- return 0;
-}
-*/
-
-/* The first step is to actually find all of the URLs and email
- * addresses using our handy regular expressions. We then mark these,
- * and then go through convert non-special areas with straight
- * text->html escapes, and convert special parts as special parts
- */
-struct _parts {
- int begin;
- int end;
- int type;
-};
-
-#define SC_TYPE_TEXT 1
-#define SC_TYPE_URL 2
-#define SC_TYPE_EMAIL 3
-
-static char *EmailRe = "[^][@:;<>\\\"()[:space:][:cntrl:]]+@[-+a-zA-Z0-9]+\\.[-+a-zA-Z0-9\\.]+[-+a-zA-Z0-9]";
-static char *URLRe = "((http|https|ftp|mailto):(//)?[^[:space:]>\"\t]*|www\\.[-a-z0-9\\.]+)[^[:space:];\t\">]*";
-
-static NEOERR *split_and_convert (const char *src, int slen,
- STRING *out, HTML_CONVERT_OPTS *opts)
-{
- NEOERR *err = STATUS_OK;
- static int compiled = 0;
- static regex_t email_re, url_re;
- regmatch_t email_match, url_match;
- int errcode;
- char *ptr, *esc;
- char errbuf[256];
- struct _parts *parts;
- int part_count;
- int part;
- int x, i;
- int spaces = 0;
-
- if (!compiled)
- {
- if ((errcode = regcomp (&email_re, EmailRe, REG_ICASE | REG_EXTENDED)))
- {
- regerror (errcode, &email_re, errbuf, sizeof(errbuf));
- return nerr_raise (NERR_PARSE, "Unable to compile EmailRE: %s", errbuf);
- }
- if ((errcode = regcomp (&url_re, URLRe, REG_ICASE | REG_EXTENDED)))
- {
- regerror (errcode, &url_re, errbuf, sizeof(errbuf));
- return nerr_raise (NERR_PARSE, "Unable to compile URLRe: %s", errbuf);
- }
- compiled = 1;
- }
-
- part_count = 20;
- parts = (struct _parts *) malloc (sizeof(struct _parts) * part_count);
- part = 0;
-
- x = 0;
- if (regexec (&email_re, src+x, 1, &email_match, 0) != 0)
- {
- email_match.rm_so = -1;
- email_match.rm_eo = -1;
- }
- else
- {
- email_match.rm_so += x;
- email_match.rm_eo += x;
- }
- if (regexec (&url_re, src+x, 1, &url_match, 0) != 0)
- {
- url_match.rm_so = -1;
- url_match.rm_eo = -1;
- }
- else
- {
- url_match.rm_so += x;
- url_match.rm_eo += x;
- }
- while ((x < slen) && !((email_match.rm_so == -1) && (url_match.rm_so == -1)))
- {
- if (part >= part_count)
- {
- part_count *= 2;
- parts = (struct _parts *) realloc (parts, sizeof(struct _parts) * part_count);
- }
- if ((url_match.rm_so != -1) && ((email_match.rm_so == -1) || (url_match.rm_so <= email_match.rm_so)))
- {
- parts[part].begin = url_match.rm_so;
- parts[part].end = url_match.rm_eo;
- parts[part].type = SC_TYPE_URL;
- x = parts[part].end + 1;
- part++;
- if (x < slen)
- {
- if (regexec (&url_re, src+x, 1, &url_match, 0) != 0)
- {
- url_match.rm_so = -1;
- url_match.rm_eo = -1;
- }
- else
- {
- url_match.rm_so += x;
- url_match.rm_eo += x;
- }
- if ((email_match.rm_so != -1) && (x > email_match.rm_so))
- {
- if (regexec (&email_re, src+x, 1, &email_match, 0) != 0)
- {
- email_match.rm_so = -1;
- email_match.rm_eo = -1;
- }
- else
- {
- email_match.rm_so += x;
- email_match.rm_eo += x;
- }
- }
- }
- }
- else
- {
- parts[part].begin = email_match.rm_so;
- parts[part].end = email_match.rm_eo;
- parts[part].type = SC_TYPE_EMAIL;
- x = parts[part].end + 1;
- part++;
- if (x < slen)
- {
- if (regexec (&email_re, src+x, 1, &email_match, 0) != 0)
- {
- email_match.rm_so = -1;
- email_match.rm_eo = -1;
- }
- else
- {
- email_match.rm_so += x;
- email_match.rm_eo += x;
- }
- if ((url_match.rm_so != -1) && (x > url_match.rm_so))
- {
- if (regexec (&url_re, src+x, 1, &url_match, 0) != 0)
- {
- url_match.rm_so = -1;
- url_match.rm_eo = -1;
- }
- else
- {
- url_match.rm_so += x;
- url_match.rm_eo += x;
- }
- }
- }
- }
- }
-
- i = 0;
- x = 0;
- while (x < slen)
- {
- if ((i >= part) || (x < parts[i].begin))
- {
- ptr = strpbrk(src + x, "&<>\r\n ");
- if (ptr == NULL)
- {
- if (spaces)
- {
- int sp;
- for (sp = 0; sp < spaces - 1; sp++)
- {
- err = string_append (out, "&nbsp;");
- if (err != STATUS_OK) break;
- }
- if (err != STATUS_OK) break;
- err = string_append_char (out, ' ');
- }
- spaces = 0;
- if (i < part)
- {
- err = string_appendn (out, src + x, parts[i].begin - x);
- x = parts[i].begin;
- }
- else
- {
- err = string_append (out, src + x);
- x = slen;
- }
- }
- else
- {
- if ((i >= part) || ((ptr - src) < parts[i].begin))
- {
- if (spaces)
- {
- int sp;
- for (sp = 0; sp < spaces - 1; sp++)
- {
- err = string_append (out, "&nbsp;");
- if (err != STATUS_OK) break;
- }
- if (err != STATUS_OK) break;
- err = string_append_char (out, ' ');
- }
- spaces = 0;
- err = string_appendn (out, src + x, (ptr - src) - x);
- if (err != STATUS_OK) break;
- x = ptr - src;
- if (src[x] == ' ')
- {
- if (opts->space_convert)
- {
- spaces++;
- }
- else
- err = string_append_char (out, ' ');
- }
- else
- {
- if (src[x] != '\n' && spaces)
- {
- int sp;
- for (sp = 0; sp < spaces - 1; sp++)
- {
- err = string_append (out, "&nbsp;");
- if (err != STATUS_OK) break;
- }
- if (err != STATUS_OK) break;
- err = string_append_char (out, ' ');
- }
- spaces = 0;
-
- if (src[x] == '&')
- err = string_append (out, "&amp;");
- else if (src[x] == '<')
- err = string_append (out, "&lt;");
- else if (src[x] == '>')
- err = string_append (out, "&gt;");
- else if (src[x] == '\n')
- if (opts->newlines_convert)
- err = string_append (out, "<br/>\n");
- else if (x && src[x-1] == '\n')
- err = string_append (out, "<p/>\n");
- else
- err = string_append_char (out, '\n');
- else if (src[x] != '\r')
- err = nerr_raise (NERR_ASSERT, "src[x] == '%c'", src[x]);
- }
- x++;
- }
- else
- {
- if (spaces)
- {
- int sp;
- for (sp = 0; sp < spaces - 1; sp++)
- {
- err = string_append (out, "&nbsp;");
- if (err != STATUS_OK) break;
- }
- if (err != STATUS_OK) break;
- err = string_append_char (out, ' ');
- }
- spaces = 0;
- err = string_appendn (out, src + x, parts[i].begin - x);
- x = parts[i].begin;
- }
- }
- }
- else
- {
- if (spaces)
- {
- int sp;
- for (sp = 0; sp < spaces - 1; sp++)
- {
- err = string_append (out, "&nbsp;");
- if (err != STATUS_OK) break;
- }
- if (err != STATUS_OK) break;
- err = string_append_char (out, ' ');
- }
- spaces = 0;
- if (parts[i].type == SC_TYPE_URL)
- {
- char last_char = src[parts[i].end-1];
- int suffix=0;
- if (last_char == '.' || last_char == ',') { suffix=1; }
- err = string_append (out, " <a ");
- if (err != STATUS_OK) break;
- if (opts->url_class)
- {
- err = string_appendf (out, "class=%s ", opts->url_class);
- if (err) break;
- }
- if (opts->url_target)
- {
- err = string_appendf (out, "target=\"%s\" ", opts->url_target);
- if (err) break;
- }
- err = string_append(out, "href=\"");
- if (err) break;
- if (opts->bounce_url)
- {
- char *url, *esc_url, *new_url;
- int url_len;
- if (!strncasecmp(src + x, "www.", 4))
- {
- url_len = 7 + parts[i].end - x - suffix;
- url = (char *) malloc(url_len+1);
- if (url == NULL)
- {
- err = nerr_raise(NERR_NOMEM,
- "Unable to allocate memory to convert url");
- break;
- }
- strcpy(url, "http://");
- strncat(url, src + x, parts[i].end - x - suffix);
- }
- else
- {
- url_len = parts[i].end - x - suffix;
- url = (char *) malloc(url_len+1);
- if (url == NULL)
- {
- err = nerr_raise(NERR_NOMEM,
- "Unable to allocate memory to convert url");
- break;
- }
- strncpy(url, src + x, parts[i].end - x - suffix);
- url[url_len] = '\0';
- }
- err = cgi_url_escape(url, &esc_url);
- free(url);
- if (err) {
- free(esc_url);
- break;
- }
-
- new_url = sprintf_alloc(opts->bounce_url, esc_url);
- free(esc_url);
- if (new_url == NULL)
- {
- err = nerr_raise(NERR_NOMEM, "Unable to allocate memory to convert url");
- break;
- }
- err = string_append (out, new_url);
- free(new_url);
- if (err) break;
- }
- else
- {
- if (!strncasecmp(src + x, "www.", 4))
- {
- err = string_append (out, "http://");
- if (err != STATUS_OK) break;
- }
- err = string_appendn (out, src + x, parts[i].end - x - suffix);
- if (err != STATUS_OK) break;
- }
- err = string_append (out, "\">");
- if (err != STATUS_OK) break;
- if (opts->link_name) {
- err = html_escape_alloc((opts->link_name),
- strlen(opts->link_name), &esc);
- } else {
- err = html_escape_alloc((src + x), parts[i].end - x - suffix, &esc);
- }
- if (err != STATUS_OK) break;
- err = string_append (out, esc);
- free(esc);
- if (err != STATUS_OK) break;
- err = string_append (out, "</a>");
- if (suffix) {
- err = string_appendn(out,src + parts[i].end - 1,1);
- if (err != STATUS_OK) break;
- }
- }
- else /* type == SC_TYPE_EMAIL */
- {
- err = string_append (out, "<a ");
- if (err != STATUS_OK) break;
- if (opts->mailto_class)
- {
- err = string_appendf (out, "class=%s ", opts->mailto_class);
- if (err) break;
- }
- err = string_append(out, "href=\"mailto:");
- if (err) break;
- err = string_appendn (out, src + x, parts[i].end - x);
- if (err != STATUS_OK) break;
- err = string_append (out, "\">");
- if (err != STATUS_OK) break;
- err = html_escape_alloc(src + x, parts[i].end - x, &esc);
- if (err != STATUS_OK) break;
- err = string_append (out, esc);
- free(esc);
- if (err != STATUS_OK) break;
- err = string_append (out, "</a>");
- }
- x = parts[i].end;
- i++;
- }
- if (err != STATUS_OK) break;
- }
- free (parts);
- return err;
-}
-
-static void strip_white_space_end (STRING *str)
-{
- int x = 0;
- int ol = str->len;
- char *ptr;
- int i;
-
- while (x < str->len)
- {
- ptr = strchr(str->buf + x, '\n');
- if (ptr == NULL)
- {
- /* just strip the white space at the end of the string */
- ol = strlen(str->buf);
- while (ol && isspace(str->buf[ol-1]))
- {
- str->buf[ol - 1] = '\0';
- ol--;
- }
- str->len = ol;
- return;
- }
- else
- {
- x = i = ptr - str->buf;
- if (x)
- {
- x--;
- while (x && isspace(str->buf[x]) && (str->buf[x] != '\n')) x--;
- if (x) x++;
- memmove (str->buf + x, ptr, ol - i + 1);
- x++;
- str->len -= ((i - x) + 1);
- str->buf[str->len] = '\0';
- ol = str->len;
- }
- }
- }
-}
-
-NEOERR *convert_text_html_alloc (const char *src, int slen,
- char **out)
-{
- return nerr_pass(convert_text_html_alloc_options(src, slen, out, NULL));
-}
-
-NEOERR *convert_text_html_alloc_options (const char *src, int slen,
- char **out,
- HTML_CONVERT_OPTS *opts)
-{
- NEOERR *err;
- STRING out_s;
- int formatting = 0;
- HTML_CONVERT_OPTS my_opts;
-
- string_init(&out_s);
-
- if (opts == NULL)
- {
- opts = &my_opts;
- opts->bounce_url = NULL;
- opts->url_class = NULL;
- opts->url_target = "_blank";
- opts->mailto_class = NULL;
- opts->long_lines = 0;
- opts->space_convert = 0;
- opts->newlines_convert = 1;
- opts->longline_width = 75; /* This hasn't been used in a while, actually */
- opts->check_ascii_art = 1;
- opts->link_name = NULL;
- }
-
- do
- {
- if (opts->check_ascii_art)
- {
- formatting = has_space_formatting (src, slen);
- if (formatting) opts->space_convert = 1;
- }
- if (formatting == 2)
- {
- /* Do <pre> formatting */
- opts->newlines_convert = 1;
- err = string_append (&out_s, "<tt>");
- if (err != STATUS_OK) break;
- err = split_and_convert(src, slen, &out_s, opts);
- if (err != STATUS_OK) break;
- err = string_append (&out_s, "</tt>");
- if (err != STATUS_OK) break;
- /* Strip white space at end of lines */
- strip_white_space_end (&out_s);
- }
- else
- {
- /* int nl = has_long_lines (src, slen); */
- err = split_and_convert(src, slen, &out_s, opts);
- }
- } while (0);
- if (err != STATUS_OK)
- {
- string_clear (&out_s);
- return nerr_pass (err);
- }
- if (out_s.buf == NULL)
- {
- *out = strdup("");
- }
- else
- {
- *out = out_s.buf;
- }
- return STATUS_OK;
-}
-
-NEOERR *html_escape_alloc (const char *src, int slen,
- char **out)
-{
- return nerr_pass(neos_html_escape(src, slen, out));
-}
-
-/* Replace ampersand with iso-8859-1 character code */
-static unsigned char _expand_amp_8859_1_char (const char *s)
-{
- if (s[0] == '\0')
- return 0;
-
- switch (s[0]) {
- case '#':
- if (s[1] == 'x') return strtol (s+2, NULL, 16);
- return strtol (s+1, NULL, 10);
- case 'a':
- if (!strcmp(s, "agrave")) return 0xe0; /* à */
- if (!strcmp(s, "aacute")) return 0xe1; /* á */
- if (!strcmp(s, "acirc")) return 0xe2; /* â */
- if (!strcmp(s, "atilde")) return 0xe3; /* ã */
- if (!strcmp(s, "auml")) return 0xe4; /* ä */
- if (!strcmp(s, "aring")) return 0xe5; /* å */
- if (!strcmp(s, "aelig")) return 0xe6; /* æ */
- if (!strcmp(s, "amp")) return '&';
- return 0;
- case 'c':
- if (!strcmp(s, "ccedil")) return 0xe7; /* ç */
- return 0;
- case 'e':
- if (!strcmp(s, "egrave")) return 0xe8; /* è */
- if (!strcmp(s, "eacute")) return 0xe9; /* é */
- if (!strcmp(s, "ecirc")) return 0xea; /* ê */
- if (!strcmp(s, "euml")) return 0xeb; /* ë */
- if (!strcmp(s, "eth")) return 0xf0; /* ð */
- return 0;
- case 'i':
- if (!strcmp(s, "igrave")) return 0xec; /* ì */
- if (!strcmp(s, "iacute")) return 0xed; /* í */
- if (!strcmp(s, "icirc")) return 0xee; /* î */
- if (!strcmp(s, "iuml")) return 0xef; /* ï */
- return 0;
- case 'g':
- if (!strcmp(s, "gt")) return '>';
- return 0;
- case 'l':
- if (!strcmp(s, "lt")) return '<';
- return 0;
- case 'n':
- if (!strcmp(s, "ntilde")) return 0xf1; /* ñ */
- if (!strcmp(s, "nbsp")) return ' ';
- return 0;
- case 'o':
- if (!strcmp(s, "ograve")) return 0xf2; /* ò */
- if (!strcmp(s, "oacute")) return 0xf3; /* ó */
- if (!strcmp(s, "ocirc")) return 0xf4; /* ô */
- if (!strcmp(s, "otilde")) return 0xf5; /* õ */
- if (!strcmp(s, "ouml")) return 0xf6; /* ö */
- if (!strcmp(s, "oslash")) return 0xf8; /* ø */
- return 0;
- case 'q': /* quot */
- if (!strcmp(s, "quot")) return '"';
- return 0;
- case 's':
- if (!strcmp(s, "szlig")) return 0xdf; /* ß */
- return 0;
- case 't':
- if (!strcmp(s, "thorn")) return 0xfe; /* þ */
- return 0;
- case 'u':
- if (!strcmp(s, "ugrave")) return 0xf9; /* ù */
- if (!strcmp(s, "uacute")) return 0xfa; /* ú */
- if (!strcmp(s, "ucirc")) return 0xfb; /* û */
- if (!strcmp(s, "uuml")) return 0xfc; /* ü */
- return 0;
- case 'y':
- if (!strcmp(s, "yacute")) return 0xfd; /* ý */
-
- }
- return 0;
-}
-
-char *html_expand_amp_8859_1(const char *amp,
- char *buf)
-{
- unsigned char ch;
-
- ch = _expand_amp_8859_1_char(amp);
- if (ch == '\0')
- {
- if (!strcmp(amp, "copy")) return "(C)";
- return "";
- }
- else {
- buf[0] = (char)ch;
- buf[1] = '\0';
- return buf;
- }
-}
-
-NEOERR *html_strip_alloc(const char *src, int slen,
- char **out)
-{
- NEOERR *err = STATUS_OK;
- STRING out_s;
- int x = 0;
- int strip_match = -1;
- int state = 0;
- char amp[10];
- int amp_start = 0;
- char buf[10];
- int ampl = 0;
-
- string_init(&out_s);
- err = string_append (&out_s, "");
- if (err) return nerr_pass (err);
-
- while (x < slen)
- {
- switch (state) {
- case 0:
- /* Default */
- if (src[x] == '&')
- {
- state = 3;
- ampl = 0;
- amp_start = x;
- }
- else if (src[x] == '<')
- {
- state = 1;
- }
- else
- {
- if (strip_match == -1)
- {
- err = string_append_char(&out_s, src[x]);
- if (err) break;
- }
- }
- x++;
- break;
- case 1:
- /* Starting TAG */
- if (src[x] == '>')
- {
- state = 0;
- }
- else if (src[x] == '/')
- {
- }
- else
- {
- }
- x++;
- break;
- case 2:
- /* In TAG */
- if (src[x] == '>')
- {
- state = 0;
- }
- x++;
- break;
- case 3:
- /* In AMP */
- if (src[x] == ';')
- {
- amp[ampl] = '\0';
- state = 0;
- err = string_append(&out_s, html_expand_amp_8859_1(amp, buf));
- if (err) break;
- }
- else
- {
- if (ampl < sizeof(amp)-1)
- amp[ampl++] = tolower(src[x]);
- else
- {
- /* broken html... just back up */
- x = amp_start;
- err = string_append_char(&out_s, src[x]);
- if (err) break;
- state = 0;
- }
- }
- x++;
- break;
- }
- if (err) break;
- }
-
-
- if (err)
- {
- string_clear (&out_s);
- return nerr_pass (err);
- }
- *out = out_s.buf;
- return STATUS_OK;
-}
diff --git a/cgi/html.h b/cgi/html.h
deleted file mode 100644
index e2854b7..0000000
--- a/cgi/html.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#ifndef __HTML_H_
-#define __HTML_H_ 1
-
-#include <stdarg.h>
-#include "util/neo_err.h"
-#include "util/neo_hdf.h"
-
-__BEGIN_DECLS
-
-typedef struct _text_html_opts {
- const char *bounce_url;
- const char *url_class;
- const char *url_target;
- const char *mailto_class;
- int long_lines;
- int space_convert;
- int newlines_convert;
- int longline_width;
- int check_ascii_art;
- const char *link_name;
-} HTML_CONVERT_OPTS;
-
-NEOERR *convert_text_html_alloc (const char *src, int slen, char **out);
-NEOERR *convert_text_html_alloc_options (const char *src, int slen,
- char **out,
- HTML_CONVERT_OPTS *opts);
-NEOERR *html_escape_alloc (const char *src, int slen, char **out);
-NEOERR *html_strip_alloc(const char *src, int slen, char **out);
-
-__END_DECLS
-
-#endif /* __HTML_H_ */
diff --git a/cgi/rfc2388.c b/cgi/rfc2388.c
deleted file mode 100644
index fe5aa0a..0000000
--- a/cgi/rfc2388.c
+++ /dev/null
@@ -1,610 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-/* rfc2388 defines multipart/form-data which is primarily used for
- * HTTP file upload
- */
-
-#include "cs_config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#include <limits.h>
-#include <ctype.h>
-#include <string.h>
-#include "util/neo_misc.h"
-#include "util/neo_err.h"
-#include "util/neo_str.h"
-#include "cgi.h"
-#include "cgiwrap.h"
-
-static NEOERR * _header_value (char *hdr, char **val)
-{
- char *p, *q;
- int l;
-
- *val = NULL;
-
- p = hdr;
- while (*p && isspace(*p)) p++;
- q = p;
- while (*q && !isspace(*q) && *q != ';') q++;
- if (!*p || p == q) return STATUS_OK;
-
- l = q - p;
- *val = (char *) malloc (l+1);
- if (*val == NULL)
- return nerr_raise (NERR_NOMEM, "Unable to allocate space for val");
- memcpy (*val, p, l);
- (*val)[l] = '\0';
-
- return STATUS_OK;
-}
-
-static NEOERR * _header_attr (char *hdr, char *attr, char **val)
-{
- char *p, *k, *v;
- int found = 0;
- int l, al;
- char *r;
-
- *val = NULL;
- l = strlen(attr);
-
- /* skip value */
- p = hdr;
- while (*p && *p != ';') p++;
- if (!*p) return STATUS_OK;
-
- p++;
- while(*p && !found)
- {
- while (*p && isspace(*p)) p++;
- if (!*p) return STATUS_OK;
- /* attr name */
- k = p;
- while (*p && !isspace(*p) && *p != ';' && *p != '=') p++;
- if (!*p) return STATUS_OK;
- if (l == (p-k) && !strncasecmp(attr, k, l))
- found = 1;
-
- while (*p && isspace(*p)) p++;
- if (*p != ';' && *p != '=') return STATUS_OK;
- if (*p == ';')
- {
- if (found)
- {
- *val = strdup ("");
- if (*val == NULL)
- return nerr_raise (NERR_NOMEM, "Unable to allocate value");
- return STATUS_OK;
- }
- }
- else
- {
- p++;
- if (*p == '"')
- {
- v = ++p;
- while (*p && *p != '"') p++;
- al = p-v;
- if (*p) p++;
- }
- else
- {
- v = p;
- while (*p && !isspace(*p) && *p != ';') p++;
- al = p-v;
- }
- if (found)
- {
- r = (char *) malloc (al+1);
- if (r == NULL)
- return nerr_raise (NERR_NOMEM, "Unable to allocate value");
- memcpy (r, v, al);
- r[al] = '\0';
- *val = r;
- return STATUS_OK;
- }
- }
- if (*p) p++;
- }
- return STATUS_OK;
-}
-
-static NEOERR * _read_line (CGI *cgi, char **s, int *l, int *done)
-{
- int ofs = 0;
- char *p;
- int to_read;
-
- if (cgi->buf == NULL)
- {
- cgi->buflen = 4096;
- cgi->buf = (char *) malloc (sizeof(char) * cgi->buflen);
- if (cgi->buf == NULL)
- return nerr_raise (NERR_NOMEM, "Unable to allocate cgi buf");
- }
- if (cgi->unget)
- {
- cgi->unget = FALSE;
- *s = cgi->last_start;
- *l = cgi->last_length;
- return STATUS_OK;
- }
- if (cgi->found_nl)
- {
- p = memchr (cgi->buf + cgi->nl, '\n', cgi->readlen - cgi->nl);
- if (p) {
- cgi->last_start = *s = cgi->buf + cgi->nl;
- cgi->last_length = *l = p - (cgi->buf + cgi->nl) + 1;
- cgi->found_nl = TRUE;
- cgi->nl = p - cgi->buf + 1;
- return STATUS_OK;
- }
- ofs = cgi->readlen - cgi->nl;
- memmove(cgi->buf, cgi->buf + cgi->nl, ofs);
- }
- // Read either as much buffer space as we have left, or up to
- // the amount of data remaining according to Content-Length
- // If there is no Content-Length, just use the buffer space, but recognize
- // that it might not work on some servers or cgiwrap implementations.
- // Some servers will close their end of the stdin pipe, so cgiwrap_read
- // will return if we ask for too much. Techically, not including
- // Content-Length is against the HTTP spec, so we should consider failing
- // earlier if we don't have a length.
- to_read = cgi->buflen - ofs;
- if (cgi->data_expected && (to_read > cgi->data_expected - cgi->data_read))
- {
- to_read = cgi->data_expected - cgi->data_read;
- }
- cgiwrap_read (cgi->buf + ofs, to_read, &(cgi->readlen));
- if (cgi->readlen < 0)
- {
- return nerr_raise_errno (NERR_IO, "POST Read Error");
- }
- if (cgi->readlen == 0)
- {
- *done = 1;
- return STATUS_OK;
- }
- cgi->data_read += cgi->readlen;
- if (cgi->upload_cb)
- {
- if (cgi->upload_cb (cgi, cgi->data_read, cgi->data_expected))
- return nerr_raise (CGIUploadCancelled, "Upload Cancelled");
- }
- cgi->readlen += ofs;
- p = memchr (cgi->buf, '\n', cgi->readlen);
- if (!p)
- {
- cgi->found_nl = FALSE;
- cgi->last_start = *s = cgi->buf;
- cgi->last_length = *l = cgi->readlen;
- return STATUS_OK;
- }
- cgi->last_start = *s = cgi->buf;
- cgi->last_length = *l = p - cgi->buf + 1;
- cgi->found_nl = TRUE;
- cgi->nl = *l;
- return STATUS_OK;
-}
-
-static NEOERR * _read_header_line (CGI *cgi, STRING *line, int *done)
-{
- NEOERR *err;
- char *s, *p;
- int l;
-
- err = _read_line (cgi, &s, &l, done);
- if (err) return nerr_pass (err);
- if (*done || (l == 0)) return STATUS_OK;
- if (isspace (s[0])) return STATUS_OK;
- while (l && isspace(s[l-1])) l--;
- err = string_appendn (line, s, l);
- if (err) return nerr_pass (err);
-
- while (1)
- {
- err = _read_line (cgi, &s, &l, done);
- if (err) break;
- if (l == 0) break;
- if (*done) break;
- if (!(s[0] == ' ' || s[0] == '\t'))
- {
- cgi->unget = TRUE;
- break;
- }
- while (l && isspace(s[l-1])) l--;
- p = s;
- while (*p && isspace(*p) && (p-s < l)) p++;
- err = string_append_char (line, ' ');
- if (err) break;
- err = string_appendn (line, p, l - (p-s));
- if (err) break;
- if (line->len > 50*1024*1024)
- {
- string_clear(line);
- return nerr_raise(NERR_ASSERT, "read_header_line exceeded 50MB");
- }
- }
- return nerr_pass (err);
-}
-
-static BOOL _is_boundary (char *boundary, char *s, int l, int *done)
-{
- static char *old_boundary = NULL;
- static int bl;
-
- /* cache the boundary strlen... more pointless optimization by blong */
- if (old_boundary != boundary)
- {
- old_boundary = boundary;
- bl = strlen(boundary);
- }
-
- if (s[l-1] != '\n')
- return FALSE;
- l--;
- if (s[l-1] == '\r')
- l--;
-
- if (bl+2 == l && s[0] == '-' && s[1] == '-' && !strncmp (s+2, boundary, bl))
- return TRUE;
- if (bl+4 == l && s[0] == '-' && s[1] == '-' &&
- !strncmp (s+2, boundary, bl) &&
- s[l-1] == '-' && s[l-2] == '-')
- {
- *done = 1;
- return TRUE;
- }
- return FALSE;
-}
-
-static NEOERR * _find_boundary (CGI *cgi, char *boundary, int *done)
-{
- NEOERR *err;
- char *s;
- int l;
-
- *done = 0;
- while (1)
- {
- err = _read_line (cgi, &s, &l, done);
- if (err) return nerr_pass (err);
- if ((l == 0) || (*done)) {
- *done = 1;
- return STATUS_OK;
- }
- if (_is_boundary(boundary, s, l, done))
- return STATUS_OK;
- }
- return STATUS_OK;
-}
-
-NEOERR *open_upload(CGI *cgi, int unlink_files, FILE **fpw)
-{
- NEOERR *err = STATUS_OK;
- FILE *fp;
- char path[_POSIX_PATH_MAX];
- int fd;
-
- *fpw = NULL;
-
- snprintf (path, sizeof(path), "%s/cgi_upload.XXXXXX",
- hdf_get_value(cgi->hdf, "Config.Upload.TmpDir", "/var/tmp"));
-
- fd = mkstemp(path);
- if (fd == -1)
- {
- return nerr_raise_errno (NERR_SYSTEM, "Unable to open temp file %s",
- path);
- }
-
- fp = fdopen (fd, "w+");
- if (fp == NULL)
- {
- close(fd);
- return nerr_raise_errno (NERR_SYSTEM, "Unable to fdopen file %s", path);
- }
- if (unlink_files) unlink(path);
- if (cgi->files == NULL)
- {
- err = uListInit (&(cgi->files), 10, 0);
- if (err)
- {
- fclose(fp);
- return nerr_pass(err);
- }
- }
- err = uListAppend (cgi->files, fp);
- if (err)
- {
- fclose (fp);
- return nerr_pass(err);
- }
- if (!unlink_files) {
- if (cgi->filenames == NULL)
- {
- err = uListInit (&(cgi->filenames), 10, 0);
- if (err)
- {
- fclose(fp);
- return nerr_pass(err);
- }
- }
- err = uListAppend (cgi->filenames, strdup(path));
- if (err)
- {
- fclose (fp);
- return nerr_pass(err);
- }
- }
- *fpw = fp;
- return STATUS_OK;
-}
-
-static NEOERR * _read_part (CGI *cgi, char *boundary, int *done)
-{
- NEOERR *err = STATUS_OK;
- STRING str;
- HDF *child, *obj = NULL;
- FILE *fp = NULL;
- char buf[256];
- char *p;
- char *name = NULL, *filename = NULL;
- char *type = NULL, *tmp = NULL;
- char *last = NULL;
- int unlink_files = hdf_get_int_value(cgi->hdf, "Config.Upload.Unlink", 1);
-
- string_init (&str);
-
- while (1)
- {
- err = _read_header_line (cgi, &str, done);
- if (err) break;
- if (*done) break;
- if (str.buf == NULL || str.buf[0] == '\0') break;
- p = strchr (str.buf, ':');
- if (p)
- {
- *p = '\0';
- if (!strcasecmp(str.buf, "content-disposition"))
- {
- err = _header_attr (p+1, "name", &name);
- if (err) break;
- err = _header_attr (p+1, "filename", &filename);
- if (err) break;
- }
- else if (!strcasecmp(str.buf, "content-type"))
- {
- err = _header_value (p+1, &type);
- if (err) break;
- }
- else if (!strcasecmp(str.buf, "content-encoding"))
- {
- err = _header_value (p+1, &tmp);
- if (err) break;
- if (tmp && strcmp(tmp, "7bit") && strcmp(tmp, "8bit") &&
- strcmp(tmp, "binary"))
- {
- free(tmp);
- err = nerr_raise (NERR_ASSERT, "form-data encoding is not supported");
- break;
- }
- free(tmp);
- }
- }
- string_set(&str, "");
- }
- if (err)
- {
- string_clear(&str);
- if (name) free(name);
- if (filename) free(filename);
- if (type) free(type);
- return nerr_pass (err);
- }
-
- do
- {
- if (filename)
- {
- err = open_upload(cgi, unlink_files, &fp);
- if (err) break;
- }
-
- string_set(&str, "");
- while (!(*done))
- {
- char *s;
- int l, w;
-
- err = _read_line (cgi, &s, &l, done);
- if (err) break;
- if (*done || (l == 0)) break;
- if (_is_boundary(boundary, s, l, done)) break;
- if (filename)
- {
- if (last) fwrite (last, sizeof(char), strlen(last), fp);
- if (l > 1 && s[l-1] == '\n' && s[l-2] == '\r')
- {
- last = "\r\n";
- l-=2;
- }
- else if (l > 0 && s[l-1] == '\n')
- {
- last = "\n";
- l--;
- }
- else last = NULL;
- w = fwrite (s, sizeof(char), l, fp);
- if (w != l)
- {
- err = nerr_raise_errno (NERR_IO,
- "Short write on file %s upload %d < %d", filename, w, l);
- break;
- }
- }
- else
- {
- err = string_appendn(&str, s, l);
- if (err) break;
- }
- }
- if (err) break;
- } while (0);
-
- /* Set up the cgi data */
- if (!err)
- {
- do {
- /* FIXME: Hmm, if we've seen the same name here before, what should we do?
- */
- if (filename)
- {
- fseek(fp, 0, SEEK_SET);
- snprintf (buf, sizeof(buf), "Query.%s", name);
- err = hdf_set_value (cgi->hdf, buf, filename);
- if (!err && type)
- {
- snprintf (buf, sizeof(buf), "Query.%s.Type", name);
- err = hdf_set_value (cgi->hdf, buf, type);
- }
- if (!err)
- {
- snprintf (buf, sizeof(buf), "Query.%s.FileHandle", name);
- err = hdf_set_int_value (cgi->hdf, buf, uListLength(cgi->files));
- }
- if (!err && !unlink_files)
- {
- char *path;
- snprintf (buf, sizeof(buf), "Query.%s.FileName", name);
- err = uListGet(cgi->filenames, uListLength(cgi->filenames)-1,
- (void *)&path);
- if (!err) err = hdf_set_value (cgi->hdf, buf, path);
- }
- }
- else
- {
- snprintf (buf, sizeof(buf), "Query.%s", name);
- while (str.len && isspace(str.buf[str.len-1]))
- {
- str.buf[str.len-1] = '\0';
- str.len--;
- }
- if (!(cgi->ignore_empty_form_vars && str.len == 0))
- {
- /* If we've seen it before... we force it into a list */
- obj = hdf_get_obj (cgi->hdf, buf);
- if (obj != NULL)
- {
- int i = 0;
- char buf2[10];
- char *t;
- child = hdf_obj_child (obj);
- if (child == NULL)
- {
- t = hdf_obj_value (obj);
- err = hdf_set_value (obj, "0", t);
- if (err != STATUS_OK) break;
- i = 1;
- }
- else
- {
- while (child != NULL)
- {
- i++;
- child = hdf_obj_next (child);
- if (err != STATUS_OK) break;
- }
- if (err != STATUS_OK) break;
- }
- snprintf (buf2, sizeof(buf2), "%d", i);
- err = hdf_set_value (obj, buf2, str.buf);
- if (err != STATUS_OK) break;
- }
- err = hdf_set_value (cgi->hdf, buf, str.buf);
- }
- }
- } while (0);
- }
-
- string_clear(&str);
- if (name) free(name);
- if (filename) free(filename);
- if (type) free(type);
-
- return nerr_pass (err);
-}
-
-NEOERR * parse_rfc2388 (CGI *cgi)
-{
- NEOERR *err;
- char *ct_hdr;
- char *boundary = NULL;
- int l;
- int done = 0;
-
- l = hdf_get_int_value (cgi->hdf, "CGI.ContentLength", -1);
- ct_hdr = hdf_get_value (cgi->hdf, "CGI.ContentType", NULL);
- if (ct_hdr == NULL)
- return nerr_raise (NERR_ASSERT, "No content type header?");
-
- cgi->data_expected = l;
- cgi->data_read = 0;
- if (cgi->upload_cb)
- {
- if (cgi->upload_cb (cgi, cgi->data_read, cgi->data_expected))
- return nerr_raise (CGIUploadCancelled, "Upload Cancelled");
- }
-
- err = _header_attr (ct_hdr, "boundary", &boundary);
- if (err) return nerr_pass (err);
- err = _find_boundary(cgi, boundary, &done);
- while (!err && !done)
- {
- err = _read_part (cgi, boundary, &done);
- }
-
- if (boundary) free(boundary);
- return nerr_pass(err);
-}
-
-/* this is here because it gets populated in this file */
-FILE *cgi_filehandle (CGI *cgi, const char *form_name)
-{
- NEOERR *err;
- FILE *fp;
- char buf[256];
- int n;
-
- if ((form_name == NULL) || (form_name[0] == '\0'))
- {
- /* if NULL, then its the PUT data we're looking for... */
- n = hdf_get_int_value (cgi->hdf, "PUT.FileHandle", -1);
- }
- else
- {
- snprintf (buf, sizeof(buf), "Query.%s.FileHandle", form_name);
- n = hdf_get_int_value (cgi->hdf, buf, -1);
- }
- if (n == -1) return NULL;
- err = uListGet(cgi->files, n-1, (void *)&fp);
- if (err)
- {
- nerr_ignore(&err);
- return NULL;
- }
- return fp;
-}
diff --git a/cgi/static.c b/cgi/static.c
deleted file mode 100644
index 6d83107..0000000
--- a/cgi/static.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-/* static.cgi
- * This is a really simple example of how you can map URL requests to a set of
- * hdf and cs files.
- */
-
-#include "ClearSilver.h"
-
-#include <unistd.h>
-#include <limits.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-int main(int argc, char **argv, char **envp)
-{
- NEOERR *err;
- CGI *cgi;
- char *cs_file;
- char hdf_file[_POSIX_PATH_MAX];
- char *p;
-
- /* CGI works by passing information from the server to the CGI program via
- * environment variables and stdin. cgi_debug_init looks for a file as the
- * first argument, and loads it. That file contains key=value pairs which
- * cgi_debug_init will load into the environment, allowing you to test your
- * program via the command line. */
- cgi_debug_init(argc, argv);
-
- /* The ClearSilver cgi toolkit accesses the CGI environment through a
- * wrapper. This allows the program to be used in other environments and
- * fake the CGI environment, such as FastCGI, mod_python, PyApache, or even
- * just from Python to access the python objects instead of the libc API.
- * cgiwrap_init_std just sets up for the default CGI environment using the
- * libc api. */
- cgiwrap_init_std(argc, argv, envp);
-
- /* cgi_init creates a CGI struct, and parses the CGI environment variables.
- * It creates an HDF structure as well. */
- err = cgi_init(&cgi, NULL);
- if (err != STATUS_OK)
- {
- /* cgi_neo_error renders a NEOERR as an error CGI result */
- cgi_neo_error(cgi, err);
- /* nerr_log_error logs the error to stderr and cleans up */
- nerr_log_error(err);
- return -1;
- }
-
- /* CGI.PathTranslated is a CGI env var which maps the URL with the
- * DocumentRoot to give you the location of the referenced file on disk */
- cs_file = hdf_get_value(cgi->hdf, "CGI.PathTranslated", NULL);
- if (cs_file == NULL)
- {
- /* cgi_error returns a simple error page */
- cgi_error(cgi, "No PATH_TRANSLATED var");
- return -1;
- }
-
- /* The hdf.loadpaths variables specify where HDF and ClearSilver look for
- * files on the file system. We start setting that up here based on
- * the directory of the file referenced */
- p = strrchr (cs_file, '/');
- if (p)
- {
- *p = '\0';
- err = hdf_set_value(cgi->hdf, "hdf.loadpaths.0", cs_file);
- chdir(cs_file);
- *p = '/';
- if (err)
- {
- cgi_neo_error(cgi, err);
- nerr_log_error(err);
- return -1;
- }
- }
- /* Next, we look for a shared HDF static dataset in common.hdf */
- err = hdf_read_file(cgi->hdf, "common.hdf");
- if (err && !nerr_handle(&err, NERR_NOT_FOUND))
- {
- cgi_neo_error(cgi, err);
- nerr_log_error(err);
- return -1;
- }
- /* Next, we look for an HDF file for this specific page. We first look
- * for passedfile.html.hdf, then we check for a file by removing an extension
- * from the file, so something like passedfile.html we'll look for
- * passedfile.hdf */
- snprintf (hdf_file, sizeof(hdf_file), "%s.hdf", cs_file);
- err = hdf_read_file (cgi->hdf, hdf_file);
- if (err && !nerr_handle(&err, NERR_NOT_FOUND))
- {
- cgi_neo_error(cgi, err);
- nerr_log_error(err);
- return -1;
- }
- p = strrchr (cs_file, '.');
- if (p)
- {
- *p = '\0';
- snprintf (hdf_file, sizeof(hdf_file), "%s.hdf", cs_file);
- *p = '.';
- err = hdf_read_file (cgi->hdf, hdf_file);
- if (err && !nerr_handle(&err, NERR_NOT_FOUND))
- {
- cgi_neo_error(cgi, err);
- nerr_log_error(err);
- return -1;
- }
- }
- /* Lastly, we need to render a template. The template is either the
- * file that was passed to us, or its specificed by CGI.StaticContent
- * in one of the HDF files we loaded above. */
- cs_file = hdf_get_value (cgi->hdf, "CGI.StaticContent", cs_file);
- err = cgi_display (cgi, cs_file);
- if (err != STATUS_OK)
- {
- cgi_neo_error(cgi, err);
- nerr_log_error(err);
- return -1;
- }
- return 0;
-}
diff --git a/config.guess b/config.guess
deleted file mode 100755
index dff9e48..0000000
--- a/config.guess
+++ /dev/null
@@ -1,1317 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-# Free Software Foundation, Inc.
-
-timestamp='2001-09-04'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Written by Per Bothner <bothner@cygnus.com>.
-# Please send patches to <config-patches@gnu.org>.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub. If it succeeds, it prints the system name on stdout, and
-# exits with 0. Otherwise, it exits with 1.
-#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit 0 ;;
- --version | -v )
- echo "$version" ; exit 0 ;;
- --help | --h* | -h )
- echo "$usage"; exit 0 ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help" >&2
- exit 1 ;;
- * )
- break ;;
- esac
-done
-
-if test $# != 0; then
- echo "$me: too many arguments$help" >&2
- exit 1
-fi
-
-
-dummy=dummy-$$
-trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script.
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,) echo "int dummy(){}" > $dummy.c ;
- for c in cc gcc c89 ; do
- ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ;
- if test $? = 0 ; then
- CC_FOR_BUILD="$c"; break ;
- fi ;
- done ;
- rm -f $dummy.c $dummy.o $dummy.rel ;
- if test x"$CC_FOR_BUILD" = x ; then
- CC_FOR_BUILD=no_compiler_found ;
- fi
- ;;
- ,,*) CC_FOR_BUILD=$CC ;;
- ,*,*) CC_FOR_BUILD=$HOST_CC ;;
-esac'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
- PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- *:NetBSD:*:*)
- # Netbsd (nbsd) targets should (where applicable) match one or
- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
- # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
- # switched to ELF, *-*-netbsd* would select the old
- # object file format. This provides both forward
- # compatibility and a consistent mechanism for selecting the
- # object file format.
- # Determine the machine/vendor (is the vendor relevant).
- case "${UNAME_MACHINE}" in
- amiga) machine=m68k-unknown ;;
- arm32) machine=arm-unknown ;;
- atari*) machine=m68k-atari ;;
- sun3*) machine=m68k-sun ;;
- mac68k) machine=m68k-apple ;;
- macppc) machine=powerpc-apple ;;
- hp3[0-9][05]) machine=m68k-hp ;;
- ibmrt|romp-ibm) machine=romp-ibm ;;
- *) machine=${UNAME_MACHINE}-unknown ;;
- esac
- # The Operating System including object format, if it has switched
- # to ELF recently, or will in the future.
- case "${UNAME_MACHINE}" in
- i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k)
- eval $set_cc_for_build
- if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep __ELF__ >/dev/null
- then
- # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
- # Return netbsd for either. FIX?
- os=netbsd
- else
- os=netbsdelf
- fi
- ;;
- *)
- os=netbsd
- ;;
- esac
- # The OS release
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
- # contains redundant information, the shorter form:
- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
- exit 0 ;;
- alpha:OSF1:*:*)
- if test $UNAME_RELEASE = "V4.0"; then
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
- fi
- # A Vn.n version is a released version.
- # A Tn.n version is a released field test version.
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
- cat <<EOF >$dummy.s
- .data
-\$Lformat:
- .byte 37,100,45,37,120,10,0 # "%d-%x\n"
-
- .text
- .globl main
- .align 4
- .ent main
-main:
- .frame \$30,16,\$26,0
- ldgp \$29,0(\$27)
- .prologue 1
- .long 0x47e03d80 # implver \$0
- lda \$2,-1
- .long 0x47e20c21 # amask \$2,\$1
- lda \$16,\$Lformat
- mov \$0,\$17
- not \$1,\$18
- jsr \$26,printf
- ldgp \$29,0(\$26)
- mov 0,\$16
- jsr \$26,exit
- .end main
-EOF
- eval $set_cc_for_build
- $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
- if test "$?" = 0 ; then
- case `./$dummy` in
- 0-0)
- UNAME_MACHINE="alpha"
- ;;
- 1-0)
- UNAME_MACHINE="alphaev5"
- ;;
- 1-1)
- UNAME_MACHINE="alphaev56"
- ;;
- 1-101)
- UNAME_MACHINE="alphapca56"
- ;;
- 2-303)
- UNAME_MACHINE="alphaev6"
- ;;
- 2-307)
- UNAME_MACHINE="alphaev67"
- ;;
- 2-1307)
- UNAME_MACHINE="alphaev68"
- ;;
- esac
- fi
- rm -f $dummy.s $dummy
- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- exit 0 ;;
- Alpha\ *:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # Should we change UNAME_MACHINE based on the output of uname instead
- # of the specific Alpha model?
- echo alpha-pc-interix
- exit 0 ;;
- 21064:Windows_NT:50:3)
- echo alpha-dec-winnt3.5
- exit 0 ;;
- Amiga*:UNIX_System_V:4.0:*)
- echo m68k-unknown-sysv4
- exit 0;;
- amiga:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- *:[Aa]miga[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-amigaos
- exit 0 ;;
- arc64:OpenBSD:*:*)
- echo mips64el-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- arc:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- hkmips:OpenBSD:*:*)
- echo mips-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- pmax:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- sgi:OpenBSD:*:*)
- echo mips-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- wgrisc:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- *:OS/390:*:*)
- echo i370-ibm-openedition
- exit 0 ;;
- arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix${UNAME_RELEASE}
- exit 0;;
- SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- echo hppa1.1-hitachi-hiuxmpp
- exit 0;;
- Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
- # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "`(/bin/universe) 2>/dev/null`" = att ; then
- echo pyramid-pyramid-sysv3
- else
- echo pyramid-pyramid-bsd
- fi
- exit 0 ;;
- NILE*:*:*:dcosx)
- echo pyramid-pyramid-svr4
- exit 0 ;;
- sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- i86pc:SunOS:5.*:*)
- echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:6*:*)
- # According to config.sub, this is the proper way to canonicalize
- # SunOS6. Hard to guess exactly what SunOS6 will be like, but
- # it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:*:*)
- case "`/usr/bin/arch -k`" in
- Series*|S4*)
- UNAME_RELEASE=`uname -v`
- ;;
- esac
- # Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
- exit 0 ;;
- sun3*:SunOS:*:*)
- echo m68k-sun-sunos${UNAME_RELEASE}
- exit 0 ;;
- sun*:*:4.2BSD:*)
- UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
- test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
- case "`/bin/arch`" in
- sun3)
- echo m68k-sun-sunos${UNAME_RELEASE}
- ;;
- sun4)
- echo sparc-sun-sunos${UNAME_RELEASE}
- ;;
- esac
- exit 0 ;;
- aushp:SunOS:*:*)
- echo sparc-auspex-sunos${UNAME_RELEASE}
- exit 0 ;;
- sparc*:NetBSD:*)
- echo `uname -p`-unknown-netbsd${UNAME_RELEASE}
- exit 0 ;;
- atari*:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- # The situation for MiNT is a little confusing. The machine name
- # can be virtually everything (everything which is not
- # "atarist" or "atariste" at least should have a processor
- # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
- # to the lowercase version "mint" (or "freemint"). Finally
- # the system name "TOS" denotes a system which is actually not
- # MiNT. But MiNT is downward compatible to TOS, so this should
- # be no problem.
- atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
- atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
- *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
- milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint${UNAME_RELEASE}
- exit 0 ;;
- hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint${UNAME_RELEASE}
- exit 0 ;;
- *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint${UNAME_RELEASE}
- exit 0 ;;
- sun3*:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mac68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mvme68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mvme88k:OpenBSD:*:*)
- echo m88k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- powerpc:machten:*:*)
- echo powerpc-apple-machten${UNAME_RELEASE}
- exit 0 ;;
- RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
- exit 0 ;;
- RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix${UNAME_RELEASE}
- exit 0 ;;
- VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix${UNAME_RELEASE}
- exit 0 ;;
- 2020:CLIX:*:* | 2430:CLIX:*:*)
- echo clipper-intergraph-clix${UNAME_RELEASE}
- exit 0 ;;
- mips:*:*:UMIPS | mips:*:*:RISCos)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
- #if defined (host_mips) && defined (MIPSEB)
- #if defined (SYSTYPE_SYSV)
- printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_SVR4)
- printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
- printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
- #endif
- #endif
- exit (-1);
- }
-EOF
- $CC_FOR_BUILD $dummy.c -o $dummy \
- && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
- && rm -f $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
- echo mips-mips-riscos${UNAME_RELEASE}
- exit 0 ;;
- Motorola:PowerMAX_OS:*:*)
- echo powerpc-motorola-powermax
- exit 0 ;;
- Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
- exit 0 ;;
- m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
- exit 0 ;;
- m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
- exit 0 ;;
- m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
- exit 0 ;;
- AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
- then
- if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
- [ ${TARGET_BINARY_INTERFACE}x = x ]
- then
- echo m88k-dg-dgux${UNAME_RELEASE}
- else
- echo m88k-dg-dguxbcs${UNAME_RELEASE}
- fi
- else
- echo i586-dg-dgux${UNAME_RELEASE}
- fi
- exit 0 ;;
- M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit 0 ;;
- M88*:*:R3*:*)
- # Delta 88k system running SVR3
- echo m88k-motorola-sysv3
- exit 0 ;;
- XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
- exit 0 ;;
- Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
- exit 0 ;;
- *:IRIX*:*:*)
- echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- exit 0 ;;
- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
- i*86:AIX:*:*)
- echo i386-ibm-aix
- exit 0 ;;
- ia64:AIX:*:*)
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
- exit 0 ;;
- *:AIX:2:3)
- if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <sys/systemcfg.h>
-
- main()
- {
- if (!__power_pc())
- exit(1);
- puts("powerpc-ibm-aix3.2.5");
- exit(0);
- }
-EOF
- $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
- echo rs6000-ibm-aix3.2.5
- elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
- else
- echo rs6000-ibm-aix3.2
- fi
- exit 0 ;;
- *:AIX:*:[45])
- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
- if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
- IBM_ARCH=rs6000
- else
- IBM_ARCH=powerpc
- fi
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${IBM_ARCH}-ibm-aix${IBM_REV}
- exit 0 ;;
- *:AIX:*:*)
- echo rs6000-ibm-aix
- exit 0 ;;
- ibmrt:4.4BSD:*|romp-ibm:BSD:*)
- echo romp-ibm-bsd4.4
- exit 0 ;;
- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
- echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
- exit 0 ;; # report: romp-ibm BSD 4.3
- *:BOSX:*:*)
- echo rs6000-bull-bosx
- exit 0 ;;
- DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
- exit 0 ;;
- 9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
- exit 0 ;;
- hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
- exit 0 ;;
- 9000/[34678]??:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- case "${UNAME_MACHINE}" in
- 9000/31? ) HP_ARCH=m68000 ;;
- 9000/[34]?? ) HP_ARCH=m68k ;;
- 9000/[678][0-9][0-9])
- case "${HPUX_REV}" in
- 11.[0-9][0-9])
- if [ -x /usr/bin/getconf ]; then
- sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
- case "${sc_cpu_version}" in
- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
- 532) # CPU_PA_RISC2_0
- case "${sc_kernel_bits}" in
- 32) HP_ARCH="hppa2.0n" ;;
- 64) HP_ARCH="hppa2.0w" ;;
- esac ;;
- esac
- fi ;;
- esac
- if [ "${HP_ARCH}" = "" ]; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-
- #define _HPUX_SOURCE
- #include <stdlib.h>
- #include <unistd.h>
-
- int main ()
- {
- #if defined(_SC_KERNEL_BITS)
- long bits = sysconf(_SC_KERNEL_BITS);
- #endif
- long cpu = sysconf (_SC_CPU_VERSION);
-
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
- case CPU_PA_RISC2_0:
- #if defined(_SC_KERNEL_BITS)
- switch (bits)
- {
- case 64: puts ("hppa2.0w"); break;
- case 32: puts ("hppa2.0n"); break;
- default: puts ("hppa2.0"); break;
- } break;
- #else /* !defined(_SC_KERNEL_BITS) */
- puts ("hppa2.0"); break;
- #endif
- default: puts ("hppa1.0"); break;
- }
- exit (0);
- }
-EOF
- (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
- if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
- rm -f $dummy.c $dummy
- fi ;;
- esac
- echo ${HP_ARCH}-hp-hpux${HPUX_REV}
- exit 0 ;;
- ia64:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- echo ia64-hp-hpux${HPUX_REV}
- exit 0 ;;
- 3050*:HI-UX:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <unistd.h>
- int
- main ()
- {
- long cpu = sysconf (_SC_CPU_VERSION);
- /* The order matters, because CPU_IS_HP_MC68K erroneously returns
- true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
- results, however. */
- if (CPU_IS_PA_RISC (cpu))
- {
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
- default: puts ("hppa-hitachi-hiuxwe2"); break;
- }
- }
- else if (CPU_IS_HP_MC68K (cpu))
- puts ("m68k-hitachi-hiuxwe2");
- else puts ("unknown-hitachi-hiuxwe2");
- exit (0);
- }
-EOF
- $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
- echo unknown-hitachi-hiuxwe2
- exit 0 ;;
- 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
- echo hppa1.1-hp-bsd
- exit 0 ;;
- 9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
- exit 0 ;;
- *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
- echo hppa1.0-hp-mpeix
- exit 0 ;;
- hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
- echo hppa1.1-hp-osf
- exit 0 ;;
- hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
- exit 0 ;;
- i*86:OSF1:*:*)
- if [ -x /usr/sbin/sysversion ] ; then
- echo ${UNAME_MACHINE}-unknown-osf1mk
- else
- echo ${UNAME_MACHINE}-unknown-osf1
- fi
- exit 0 ;;
- parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
- exit 0 ;;
- hppa*:OpenBSD:*:*)
- echo hppa-unknown-openbsd
- exit 0 ;;
- C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
- exit 0 ;;
- C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit 0 ;;
- C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
- exit 0 ;;
- C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
- exit 0 ;;
- C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
- exit 0 ;;
- CRAY*X-MP:*:*:*)
- echo xmp-cray-unicos
- exit 0 ;;
- CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*[A-Z]90:*:*:*)
- echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
- | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
- -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*TS:*:*:*)
- echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*T3D:*:*:*)
- echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*T3E:*:*:*)
- echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*SV1:*:*:*)
- echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY-2:*:*:*)
- echo cray2-cray-unicos
- exit 0 ;;
- F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
- FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit 0 ;;
- hp300:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
- exit 0 ;;
- sparc*:BSD/OS:*:*)
- echo sparc-unknown-bsdi${UNAME_RELEASE}
- exit 0 ;;
- *:BSD/OS:*:*)
- echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
- exit 0 ;;
- *:FreeBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit 0 ;;
- *:OpenBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- exit 0 ;;
- i*:CYGWIN*:*)
- echo ${UNAME_MACHINE}-pc-cygwin
- exit 0 ;;
- i*:MINGW*:*)
- echo ${UNAME_MACHINE}-pc-mingw32
- exit 0 ;;
- i*:PW*:*)
- echo ${UNAME_MACHINE}-pc-pw32
- exit 0 ;;
- i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
- # UNAME_MACHINE based on the output of uname instead of i386?
- echo i386-pc-interix
- exit 0 ;;
- i*:UWIN*:*)
- echo ${UNAME_MACHINE}-pc-uwin
- exit 0 ;;
- p*:CYGWIN*:*)
- echo powerpcle-unknown-cygwin
- exit 0 ;;
- prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- *:GNU:*:*)
- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- exit 0 ;;
- i*86:Minix:*:*)
- echo ${UNAME_MACHINE}-pc-minix
- exit 0 ;;
- arm*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux
- exit 0 ;;
- m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- mips:Linux:*:*)
- case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in
- big) echo mips-unknown-linux-gnu && exit 0 ;;
- little) echo mipsel-unknown-linux-gnu && exit 0 ;;
- esac
- ;;
- ppc:Linux:*:*)
- echo powerpc-unknown-linux-gnu
- exit 0 ;;
- ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-gnu
- exit 0 ;;
- alpha:Linux:*:*)
- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
- EV5) UNAME_MACHINE=alphaev5 ;;
- EV56) UNAME_MACHINE=alphaev56 ;;
- PCA56) UNAME_MACHINE=alphapca56 ;;
- PCA57) UNAME_MACHINE=alphapca56 ;;
- EV6) UNAME_MACHINE=alphaev6 ;;
- EV67) UNAME_MACHINE=alphaev67 ;;
- EV68*) UNAME_MACHINE=alphaev68 ;;
- esac
- objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
- exit 0 ;;
- parisc:Linux:*:* | hppa:Linux:*:*)
- # Look for CPU level
- case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
- PA7*) echo hppa1.1-unknown-linux-gnu ;;
- PA8*) echo hppa2.0-unknown-linux-gnu ;;
- *) echo hppa-unknown-linux-gnu ;;
- esac
- exit 0 ;;
- parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-gnu
- exit 0 ;;
- s390:Linux:*:* | s390x:Linux:*:*)
- echo ${UNAME_MACHINE}-ibm-linux
- exit 0 ;;
- sh*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- sparc:Linux:*:* | sparc64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- x86_64:Linux:*:*)
- echo x86_64-unknown-linux-gnu
- exit 0 ;;
- i*86:Linux:*:*)
- # The BFD linker knows what the default object file format is, so
- # first see if it will tell us. cd to the root directory to prevent
- # problems with other programs or directories called `ld' in the path.
- ld_supported_targets=`cd /; ld --help 2>&1 \
- | sed -ne '/supported targets:/!d
- s/[ ][ ]*/ /g
- s/.*supported targets: *//
- s/ .*//
- p'`
- case "$ld_supported_targets" in
- elf32-i386)
- TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
- ;;
- a.out-i386-linux)
- echo "${UNAME_MACHINE}-pc-linux-gnuaout"
- exit 0 ;;
- coff-i386)
- echo "${UNAME_MACHINE}-pc-linux-gnucoff"
- exit 0 ;;
- "")
- # Either a pre-BFD a.out linker (linux-gnuoldld) or
- # one that does not give us useful --help.
- echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
- exit 0 ;;
- esac
- # Determine whether the default compiler is a.out or elf
- eval $set_cc_for_build
- cat >$dummy.c <<EOF
-#include <features.h>
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
-#ifdef __ELF__
-# ifdef __GLIBC__
-# if __GLIBC__ >= 2
- printf ("%s-pc-linux-gnu\n", argv[1]);
-# else
- printf ("%s-pc-linux-gnulibc1\n", argv[1]);
-# endif
-# else
- printf ("%s-pc-linux-gnulibc1\n", argv[1]);
-# endif
-#else
- printf ("%s-pc-linux-gnuaout\n", argv[1]);
-#endif
- return 0;
-}
-EOF
- $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
- test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
- ;;
- i*86:DYNIX/ptx:4*:*)
- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
- # earlier versions are messed up and put the nodename in both
- # sysname and nodename.
- echo i386-sequent-sysv4
- exit 0 ;;
- i*86:UNIX_SV:4.2MP:2.*)
- # Unixware is an offshoot of SVR4, but it has its own version
- # number series starting with 2...
- # I am not positive that other SVR4 systems won't match this,
- # I just have to hope. -- rms.
- # Use sysv4.2uw... so that sysv4* matches it.
- echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
- exit 0 ;;
- i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
- UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
- else
- echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
- fi
- exit 0 ;;
- i*86:*:5:[78]*)
- case `/bin/uname -X | grep "^Machine"` in
- *486*) UNAME_MACHINE=i486 ;;
- *Pentium) UNAME_MACHINE=i586 ;;
- *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
- esac
- echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
- exit 0 ;;
- i*86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
- echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
- elif /bin/uname -X 2>/dev/null >/dev/null ; then
- UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
- (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
- (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
- && UNAME_MACHINE=i586
- (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
- && UNAME_MACHINE=i686
- (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
- && UNAME_MACHINE=i686
- echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
- else
- echo ${UNAME_MACHINE}-pc-sysv32
- fi
- exit 0 ;;
- i*86:*DOS:*:*)
- echo ${UNAME_MACHINE}-pc-msdosdjgpp
- exit 0 ;;
- pc:*:*:*)
- # Left here for compatibility:
- # uname -m prints for DJGPP always 'pc', but it prints nothing about
- # the processor, so we play safe by assuming i386.
- echo i386-pc-msdosdjgpp
- exit 0 ;;
- Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit 0 ;;
- paragon:*:*:*)
- echo i860-intel-osf1
- exit 0 ;;
- i860:*:4.*:*) # i860-SVR4
- if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
- else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
- fi
- exit 0 ;;
- mini*:CTIX:SYS*5:*)
- # "miniframe"
- echo m68010-convergent-sysv
- exit 0 ;;
- M68*:*:R3V[567]*:*)
- test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
- 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
- OS_REL=''
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4.3${OS_REL} && exit 0
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
- 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4 && exit 0 ;;
- m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- echo m68k-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
- exit 0 ;;
- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
- echo i386-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- rs6000:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
- echo powerpc-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv${UNAME_RELEASE}
- exit 0 ;;
- RM*:ReliantUNIX-*:*:*)
- echo mips-sni-sysv4
- exit 0 ;;
- RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
- exit 0 ;;
- *:SINIX-*:*:*)
- if uname -p 2>/dev/null >/dev/null ; then
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- echo ${UNAME_MACHINE}-sni-sysv4
- else
- echo ns32k-sni-sysv
- fi
- exit 0 ;;
- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit 0 ;;
- *:UNIX_System_V:4*:FTX*)
- # From Gerald Hewes <hewes@openmarket.com>.
- # How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
- exit 0 ;;
- *:*:*:FTX*)
- # From seanf@swdc.stratus.com.
- echo i860-stratus-sysv4
- exit 0 ;;
- *:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo hppa1.1-stratus-vos
- exit 0 ;;
- mc68*:A/UX:*:*)
- echo m68k-apple-aux${UNAME_RELEASE}
- exit 0 ;;
- news*:NEWS-OS:6*:*)
- echo mips-sony-newsos6
- exit 0 ;;
- R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- if [ -d /usr/nec ]; then
- echo mips-nec-sysv${UNAME_RELEASE}
- else
- echo mips-unknown-sysv${UNAME_RELEASE}
- fi
- exit 0 ;;
- BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
- echo powerpc-be-beos
- exit 0 ;;
- BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
- echo powerpc-apple-beos
- exit 0 ;;
- BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
- echo i586-pc-beos
- exit 0 ;;
- SX-4:SUPER-UX:*:*)
- echo sx4-nec-superux${UNAME_RELEASE}
- exit 0 ;;
- SX-5:SUPER-UX:*:*)
- echo sx5-nec-superux${UNAME_RELEASE}
- exit 0 ;;
- Power*:Rhapsody:*:*)
- echo powerpc-apple-rhapsody${UNAME_RELEASE}
- exit 0 ;;
- *:Rhapsody:*:*)
- echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
- exit 0 ;;
- *:Darwin:*:*)
- echo `uname -p`-apple-darwin${UNAME_RELEASE}
- exit 0 ;;
- *:procnto*:*:* | *:QNX:[0123456789]*:*)
- if test "${UNAME_MACHINE}" = "x86pc"; then
- UNAME_MACHINE=pc
- fi
- echo `uname -p`-${UNAME_MACHINE}-nto-qnx
- exit 0 ;;
- *:QNX:*:4*)
- echo i386-pc-qnx
- exit 0 ;;
- NSR-[KW]:NONSTOP_KERNEL:*:*)
- echo nsr-tandem-nsk${UNAME_RELEASE}
- exit 0 ;;
- *:NonStop-UX:*:*)
- echo mips-compaq-nonstopux
- exit 0 ;;
- BS2000:POSIX*:*:*)
- echo bs2000-siemens-sysv
- exit 0 ;;
- DS/*:UNIX_System_V:*:*)
- echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
- exit 0 ;;
- *:Plan9:*:*)
- # "uname -m" is not consistent, so use $cputype instead. 386
- # is converted to i386 for consistency with other x86
- # operating systems.
- if test "$cputype" = "386"; then
- UNAME_MACHINE=i386
- else
- UNAME_MACHINE="$cputype"
- fi
- echo ${UNAME_MACHINE}-unknown-plan9
- exit 0 ;;
- i*86:OS/2:*:*)
- # If we were able to find `uname', then EMX Unix compatibility
- # is probably installed.
- echo ${UNAME_MACHINE}-pc-os2-emx
- exit 0 ;;
- *:TOPS-10:*:*)
- echo pdp10-unknown-tops10
- exit 0 ;;
- *:TENEX:*:*)
- echo pdp10-unknown-tenex
- exit 0 ;;
- KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- echo pdp10-dec-tops20
- exit 0 ;;
- XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- echo pdp10-xkl-tops20
- exit 0 ;;
- *:TOPS-20:*:*)
- echo pdp10-unknown-tops20
- exit 0 ;;
- *:ITS:*:*)
- echo pdp10-unknown-its
- exit 0 ;;
- i*86:XTS-300:*:STOP)
- echo ${UNAME_MACHINE}-unknown-stop
- exit 0 ;;
- i*86:atheos:*:*)
- echo ${UNAME_MACHINE}-unknown-atheos
- exit 0 ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
- I don't know.... */
- printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
- "4"
-#else
- ""
-#endif
- ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
- printf ("arm-acorn-riscix"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
- printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
- if (version < 4)
- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- else
- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
- exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
- printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
- printf ("ns32k-encore-mach\n"); exit (0);
-#else
- printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
- printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
- printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
- struct utsname un;
-
- uname(&un);
-
- if (strncmp(un.version, "V2", 2) == 0) {
- printf ("i386-sequent-ptx2\n"); exit (0);
- }
- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- printf ("i386-sequent-ptx1\n"); exit (0);
- }
- printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-# include <sys/param.h>
-# if defined (BSD)
-# if BSD == 43
- printf ("vax-dec-bsd4.3\n"); exit (0);
-# else
-# if BSD == 199006
- printf ("vax-dec-bsd4.3reno\n"); exit (0);
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# endif
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# else
- printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
- printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
- exit (1);
-}
-EOF
-
-$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
-rm -f $dummy.c $dummy
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
- case `getsysinfo -f cpu_type` in
- c1*)
- echo c1-convex-bsd
- exit 0 ;;
- c2*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit 0 ;;
- c34*)
- echo c34-convex-bsd
- exit 0 ;;
- c38*)
- echo c38-convex-bsd
- exit 0 ;;
- c4*)
- echo c4-convex-bsd
- exit 0 ;;
- esac
-fi
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
- ftp://ftp.gnu.org/pub/gnu/config/
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-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`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo = `(hostinfo) 2>/dev/null`
-/bin/universe = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/config.sub b/config.sub
deleted file mode 100755
index 393f13d..0000000
--- a/config.sub
+++ /dev/null
@@ -1,1411 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-# Free Software Foundation, Inc.
-
-timestamp='2001-09-07'
-
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine. It does not imply ALL GNU software can.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Please send patches to <config-patches@gnu.org>.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support. The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
- $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit 0 ;;
- --version | -v )
- echo "$version" ; exit 0 ;;
- --help | --h* | -h )
- echo "$usage"; exit 0 ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help"
- exit 1 ;;
-
- *local*)
- # First pass through any local machine types.
- echo $1
- exit 0;;
-
- * )
- break ;;
- esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
- exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
- exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
- nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-*)
- os=-$maybe_os
- basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
- ;;
- *)
- basic_machine=`echo $1 | sed 's/-[^-]*$//'`
- if [ $basic_machine != $1 ]
- then os=`echo $1 | sed 's/.*-/-/'`
- else os=; fi
- ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work. We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
- -sun*os*)
- # Prevent following clause from handling this invalid input.
- ;;
- -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
- -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
- -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
- -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
- -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
- -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple | -axis)
- os=
- basic_machine=$1
- ;;
- -sim | -cisco | -oki | -wec | -winbond)
- os=
- basic_machine=$1
- ;;
- -scout)
- ;;
- -wrs)
- os=-vxworks
- basic_machine=$1
- ;;
- -chorusos*)
- os=-chorusos
- basic_machine=$1
- ;;
- -chorusrdb)
- os=-chorusrdb
- basic_machine=$1
- ;;
- -hiux*)
- os=-hiuxwe2
- ;;
- -sco5)
- os=-sco3.2v5
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco4)
- os=-sco3.2v4
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2.[4-9]*)
- os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2v[4-9]*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco*)
- os=-sco3.2v2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -udk*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -isc)
- os=-isc2.2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -clix*)
- basic_machine=clipper-intergraph
- ;;
- -isc*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -lynx*)
- os=-lynxos
- ;;
- -ptx*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
- ;;
- -windowsnt*)
- os=`echo $os | sed -e 's/windowsnt/winnt/'`
- ;;
- -psos*)
- os=-psos
- ;;
- -mint | -mint[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
- # Recognize the basic CPU types without company name.
- # Some are omitted here because they have special meanings below.
- 1750a | 580 \
- | a29k \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
- | c4x | clipper \
- | d10v | d30v | dsp16xx \
- | fr30 \
- | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | i370 | i860 | i960 | ia64 \
- | m32r | m68000 | m68k | m88k | mcore \
- | mips16 | mips64 | mips64el | mips64orion | mips64orionel \
- | mips64vr4100 | mips64vr4100el | mips64vr4300 \
- | mips64vr4300el | mips64vr5000 | mips64vr5000el \
- | mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \
- | mipsisa32 \
- | mn10200 | mn10300 \
- | ns16k | ns32k \
- | openrisc \
- | pdp10 | pdp11 | pj | pjl \
- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
- | pyramid \
- | s390 | s390x \
- | sh | sh[34] | sh[34]eb | shbe | shle \
- | sparc | sparc64 | sparclet | sparclite | sparcv9 | sparcv9b \
- | stormy16 | strongarm \
- | tahoe | thumb | tic80 | tron \
- | v850 \
- | we32k \
- | x86 | xscale \
- | z8k)
- basic_machine=$basic_machine-unknown
- ;;
- m6811 | m68hc11 | m6812 | m68hc12)
- # Motorola 68HC11/12.
- basic_machine=$basic_machine-unknown
- os=-none
- ;;
- m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
- ;;
-
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
- # (2) the word "unknown" tends to confuse beginning users.
- i*86 | x86_64)
- basic_machine=$basic_machine-pc
- ;;
- # Object if more than one company name word.
- *-*-*)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
- # Recognize the basic CPU types with company name.
- 580-* \
- | a29k-* \
- | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
- | alphapca5[67]-* | arc-* \
- | arm-* | armbe-* | armle-* | armv*-* \
- | bs2000-* \
- | c[123]* | c30-* | [cjt]90-* | c54x-* \
- | clipper-* | cray2-* | cydra-* \
- | d10v-* | d30v-* \
- | elxsi-* \
- | f30[01]-* | f700-* | fr30-* | fx80-* \
- | h8300-* | h8500-* \
- | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
- | i*86-* | i860-* | i960-* | ia64-* \
- | m32r-* \
- | m68000-* | m680[01234]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | mcore-* \
- | mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \
- | mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \
- | mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \
- | mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \
- | none-* | np1-* | ns16k-* | ns32k-* \
- | orion-* \
- | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
- | pyramid-* \
- | romp-* | rs6000-* \
- | s390-* | s390x-* \
- | sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* \
- | sparc-* | sparc64-* | sparc86x-* | sparclite-* \
- | sparcv9-* | sparcv9b-* | stormy16-* | strongarm-* | sv1-* \
- | t3e-* | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \
- | v850-* | vax-* \
- | we32k-* \
- | x86-* | x86_64-* | xmp-* | xps100-* | xscale-* \
- | ymp-* \
- | z8k-*)
- ;;
- # Recognize the various machine names and aliases which stand
- # for a CPU type and a company and sometimes even an OS.
- 386bsd)
- basic_machine=i386-unknown
- os=-bsd
- ;;
- 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- basic_machine=m68000-att
- ;;
- 3b*)
- basic_machine=we32k-att
- ;;
- a29khif)
- basic_machine=a29k-amd
- os=-udi
- ;;
- adobe68k)
- basic_machine=m68010-adobe
- os=-scout
- ;;
- alliant | fx80)
- basic_machine=fx80-alliant
- ;;
- altos | altos3068)
- basic_machine=m68k-altos
- ;;
- am29k)
- basic_machine=a29k-none
- os=-bsd
- ;;
- amdahl)
- basic_machine=580-amdahl
- os=-sysv
- ;;
- amiga | amiga-*)
- basic_machine=m68k-unknown
- ;;
- amigaos | amigados)
- basic_machine=m68k-unknown
- os=-amigaos
- ;;
- amigaunix | amix)
- basic_machine=m68k-unknown
- os=-sysv4
- ;;
- apollo68)
- basic_machine=m68k-apollo
- os=-sysv
- ;;
- apollo68bsd)
- basic_machine=m68k-apollo
- os=-bsd
- ;;
- aux)
- basic_machine=m68k-apple
- os=-aux
- ;;
- balance)
- basic_machine=ns32k-sequent
- os=-dynix
- ;;
- convex-c1)
- basic_machine=c1-convex
- os=-bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- os=-bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- os=-bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- os=-bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- os=-bsd
- ;;
- cray | ymp)
- basic_machine=ymp-cray
- os=-unicos
- ;;
- cray2)
- basic_machine=cray2-cray
- os=-unicos
- ;;
- [cjt]90)
- basic_machine=${basic_machine}-cray
- os=-unicos
- ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
- cris | cris-* | etrax*)
- basic_machine=cris-axis
- ;;
- da30 | da30-*)
- basic_machine=m68k-da30
- ;;
- decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
- basic_machine=mips-dec
- ;;
- delta | 3300 | motorola-3300 | motorola-delta \
- | 3300-motorola | delta-motorola)
- basic_machine=m68k-motorola
- ;;
- delta88)
- basic_machine=m88k-motorola
- os=-sysv3
- ;;
- dpx20 | dpx20-*)
- basic_machine=rs6000-bull
- os=-bosx
- ;;
- dpx2* | dpx2*-bull)
- basic_machine=m68k-bull
- os=-sysv3
- ;;
- ebmon29k)
- basic_machine=a29k-amd
- os=-ebmon
- ;;
- elxsi)
- basic_machine=elxsi-elxsi
- os=-bsd
- ;;
- encore | umax | mmax)
- basic_machine=ns32k-encore
- ;;
- es1800 | OSE68k | ose68k | ose | OSE)
- basic_machine=m68k-ericsson
- os=-ose
- ;;
- fx2800)
- basic_machine=i860-alliant
- ;;
- genix)
- basic_machine=ns32k-ns
- ;;
- gmicro)
- basic_machine=tron-gmicro
- os=-sysv
- ;;
- go32)
- basic_machine=i386-pc
- os=-go32
- ;;
- h3050r* | hiux*)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- h8300hms)
- basic_machine=h8300-hitachi
- os=-hms
- ;;
- h8300xray)
- basic_machine=h8300-hitachi
- os=-xray
- ;;
- h8500hms)
- basic_machine=h8500-hitachi
- os=-hms
- ;;
- harris)
- basic_machine=m88k-harris
- os=-sysv3
- ;;
- hp300-*)
- basic_machine=m68k-hp
- ;;
- hp300bsd)
- basic_machine=m68k-hp
- os=-bsd
- ;;
- hp300hpux)
- basic_machine=m68k-hp
- os=-hpux
- ;;
- hp3k9[0-9][0-9] | hp9[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k2[0-9][0-9] | hp9k31[0-9])
- basic_machine=m68000-hp
- ;;
- hp9k3[2-9][0-9])
- basic_machine=m68k-hp
- ;;
- hp9k6[0-9][0-9] | hp6[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k7[0-79][0-9] | hp7[0-79][0-9])
- basic_machine=hppa1.1-hp
- ;;
- hp9k78[0-9] | hp78[0-9])
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][13679] | hp8[0-9][13679])
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][0-9] | hp8[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hppa-next)
- os=-nextstep3
- ;;
- hppaosf)
- basic_machine=hppa1.1-hp
- os=-osf
- ;;
- hppro)
- basic_machine=hppa1.1-hp
- os=-proelf
- ;;
- i370-ibm* | ibm*)
- basic_machine=i370-ibm
- ;;
-# I'm not sure what "Sysv32" means. Should this be sysv3.2?
- i*86v32)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv32
- ;;
- i*86v4*)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv4
- ;;
- i*86v)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv
- ;;
- i*86sol2)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-solaris2
- ;;
- i386mach)
- basic_machine=i386-mach
- os=-mach
- ;;
- i386-vsta | vsta)
- basic_machine=i386-unknown
- os=-vsta
- ;;
- iris | iris4d)
- basic_machine=mips-sgi
- case $os in
- -irix*)
- ;;
- *)
- os=-irix4
- ;;
- esac
- ;;
- isi68 | isi)
- basic_machine=m68k-isi
- os=-sysv
- ;;
- m88k-omron*)
- basic_machine=m88k-omron
- ;;
- magnum | m3230)
- basic_machine=mips-mips
- os=-sysv
- ;;
- merlin)
- basic_machine=ns32k-utek
- os=-sysv
- ;;
- mingw32)
- basic_machine=i386-pc
- os=-mingw32
- ;;
- miniframe)
- basic_machine=m68000-convergent
- ;;
- *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
- mipsel*-linux*)
- basic_machine=mipsel-unknown
- os=-linux-gnu
- ;;
- mips*-linux*)
- basic_machine=mips-unknown
- os=-linux-gnu
- ;;
- mips3*-*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
- ;;
- mips3*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
- ;;
- mmix*)
- basic_machine=mmix-knuth
- os=-mmixware
- ;;
- monitor)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- msdos)
- basic_machine=i386-pc
- os=-msdos
- ;;
- mvs)
- basic_machine=i370-ibm
- os=-mvs
- ;;
- ncr3000)
- basic_machine=i486-ncr
- os=-sysv4
- ;;
- netbsd386)
- basic_machine=i386-unknown
- os=-netbsd
- ;;
- netwinder)
- basic_machine=armv4l-rebel
- os=-linux
- ;;
- news | news700 | news800 | news900)
- basic_machine=m68k-sony
- os=-newsos
- ;;
- news1000)
- basic_machine=m68030-sony
- os=-newsos
- ;;
- news-3600 | risc-news)
- basic_machine=mips-sony
- os=-newsos
- ;;
- necv70)
- basic_machine=v70-nec
- os=-sysv
- ;;
- next | m*-next )
- basic_machine=m68k-next
- case $os in
- -nextstep* )
- ;;
- -ns2*)
- os=-nextstep2
- ;;
- *)
- os=-nextstep3
- ;;
- esac
- ;;
- nh3000)
- basic_machine=m68k-harris
- os=-cxux
- ;;
- nh[45]000)
- basic_machine=m88k-harris
- os=-cxux
- ;;
- nindy960)
- basic_machine=i960-intel
- os=-nindy
- ;;
- mon960)
- basic_machine=i960-intel
- os=-mon960
- ;;
- nonstopux)
- basic_machine=mips-compaq
- os=-nonstopux
- ;;
- np1)
- basic_machine=np1-gould
- ;;
- nsr-tandem)
- basic_machine=nsr-tandem
- ;;
- op50n-* | op60c-*)
- basic_machine=hppa1.1-oki
- os=-proelf
- ;;
- OSE68000 | ose68000)
- basic_machine=m68000-ericsson
- os=-ose
- ;;
- os68k)
- basic_machine=m68k-none
- os=-os68k
- ;;
- pa-hitachi)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- paragon)
- basic_machine=i860-intel
- os=-osf
- ;;
- pbd)
- basic_machine=sparc-tti
- ;;
- pbb)
- basic_machine=m68k-tti
- ;;
- pc532 | pc532-*)
- basic_machine=ns32k-pc532
- ;;
- pentium | p5 | k5 | k6 | nexgen)
- basic_machine=i586-pc
- ;;
- pentiumpro | p6 | 6x86 | athlon)
- basic_machine=i686-pc
- ;;
- pentiumii | pentium2)
- basic_machine=i686-pc
- ;;
- pentium-* | p5-* | k5-* | k6-* | nexgen-*)
- basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumpro-* | p6-* | 6x86-* | athlon-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumii-* | pentium2-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pn)
- basic_machine=pn-gould
- ;;
- power) basic_machine=power-ibm
- ;;
- ppc) basic_machine=powerpc-unknown
- ;;
- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppcle | powerpclittle | ppc-le | powerpc-little)
- basic_machine=powerpcle-unknown
- ;;
- ppcle-* | powerpclittle-*)
- basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64) basic_machine=powerpc64-unknown
- ;;
- ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64le | powerpc64little | ppc64-le | powerpc64-little)
- basic_machine=powerpc64le-unknown
- ;;
- ppc64le-* | powerpc64little-*)
- basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ps2)
- basic_machine=i386-ibm
- ;;
- pw32)
- basic_machine=i586-unknown
- os=-pw32
- ;;
- rom68k)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- rm[46]00)
- basic_machine=mips-siemens
- ;;
- rtpc | rtpc-*)
- basic_machine=romp-ibm
- ;;
- sa29200)
- basic_machine=a29k-amd
- os=-udi
- ;;
- sequent)
- basic_machine=i386-sequent
- ;;
- sh)
- basic_machine=sh-hitachi
- os=-hms
- ;;
- sparclite-wrs)
- basic_machine=sparclite-wrs
- os=-vxworks
- ;;
- sps7)
- basic_machine=m68k-bull
- os=-sysv2
- ;;
- spur)
- basic_machine=spur-unknown
- ;;
- st2000)
- basic_machine=m68k-tandem
- ;;
- stratus)
- basic_machine=i860-stratus
- os=-sysv4
- ;;
- sun2)
- basic_machine=m68000-sun
- ;;
- sun2os3)
- basic_machine=m68000-sun
- os=-sunos3
- ;;
- sun2os4)
- basic_machine=m68000-sun
- os=-sunos4
- ;;
- sun3os3)
- basic_machine=m68k-sun
- os=-sunos3
- ;;
- sun3os4)
- basic_machine=m68k-sun
- os=-sunos4
- ;;
- sun4os3)
- basic_machine=sparc-sun
- os=-sunos3
- ;;
- sun4os4)
- basic_machine=sparc-sun
- os=-sunos4
- ;;
- sun4sol2)
- basic_machine=sparc-sun
- os=-solaris2
- ;;
- sun3 | sun3-*)
- basic_machine=m68k-sun
- ;;
- sun4)
- basic_machine=sparc-sun
- ;;
- sun386 | sun386i | roadrunner)
- basic_machine=i386-sun
- ;;
- sv1)
- basic_machine=sv1-cray
- os=-unicos
- ;;
- symmetry)
- basic_machine=i386-sequent
- os=-dynix
- ;;
- t3e)
- basic_machine=t3e-cray
- os=-unicos
- ;;
- tic54x | c54x*)
- basic_machine=tic54x-unknown
- os=-coff
- ;;
- tx39)
- basic_machine=mipstx39-unknown
- ;;
- tx39el)
- basic_machine=mipstx39el-unknown
- ;;
- tower | tower-32)
- basic_machine=m68k-ncr
- ;;
- udi29k)
- basic_machine=a29k-amd
- os=-udi
- ;;
- ultra3)
- basic_machine=a29k-nyu
- os=-sym1
- ;;
- v810 | necv810)
- basic_machine=v810-nec
- os=-none
- ;;
- vaxv)
- basic_machine=vax-dec
- os=-sysv
- ;;
- vms)
- basic_machine=vax-dec
- os=-vms
- ;;
- vpp*|vx|vx-*)
- basic_machine=f301-fujitsu
- ;;
- vxworks960)
- basic_machine=i960-wrs
- os=-vxworks
- ;;
- vxworks68)
- basic_machine=m68k-wrs
- os=-vxworks
- ;;
- vxworks29k)
- basic_machine=a29k-wrs
- os=-vxworks
- ;;
- w65*)
- basic_machine=w65-wdc
- os=-none
- ;;
- w89k-*)
- basic_machine=hppa1.1-winbond
- os=-proelf
- ;;
- windows32)
- basic_machine=i386-pc
- os=-windows32-msvcrt
- ;;
- xmp)
- basic_machine=xmp-cray
- os=-unicos
- ;;
- xps | xps100)
- basic_machine=xps100-honeywell
- ;;
- z8k-*-coff)
- basic_machine=z8k-unknown
- os=-sim
- ;;
- none)
- basic_machine=none-none
- os=-none
- ;;
-
-# Here we handle the default manufacturer of certain CPU types. It is in
-# some cases the only manufacturer, in others, it is the most popular.
- w89k)
- basic_machine=hppa1.1-winbond
- ;;
- op50n)
- basic_machine=hppa1.1-oki
- ;;
- op60c)
- basic_machine=hppa1.1-oki
- ;;
- mips)
- if [ x$os = x-linux-gnu ]; then
- basic_machine=mips-unknown
- else
- basic_machine=mips-mips
- fi
- ;;
- romp)
- basic_machine=romp-ibm
- ;;
- rs6000)
- basic_machine=rs6000-ibm
- ;;
- vax)
- basic_machine=vax-dec
- ;;
- pdp10)
- # there are many clones, so DEC is not a safe bet
- basic_machine=pdp10-unknown
- ;;
- pdp11)
- basic_machine=pdp11-dec
- ;;
- we32k)
- basic_machine=we32k-att
- ;;
- sh3 | sh4 | sh3eb | sh4eb)
- basic_machine=sh-unknown
- ;;
- sparc | sparcv9 | sparcv9b)
- basic_machine=sparc-sun
- ;;
- cydra)
- basic_machine=cydra-cydrome
- ;;
- orion)
- basic_machine=orion-highlevel
- ;;
- orion105)
- basic_machine=clipper-highlevel
- ;;
- mac | mpw | mac-mpw)
- basic_machine=m68k-apple
- ;;
- pmac | pmac-mpw)
- basic_machine=powerpc-apple
- ;;
- c4x*)
- basic_machine=c4x-none
- os=-coff
- ;;
- *-unknown)
- # Make sure to match an already-canonicalized machine name.
- ;;
- *)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
- *-digital*)
- basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
- ;;
- *-commodore*)
- basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
- ;;
- *)
- ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
- # First match some system type aliases
- # that might get confused with valid system types.
- # -solaris* is a basic system type, with this one exception.
- -solaris1 | -solaris1.*)
- os=`echo $os | sed -e 's|solaris1|sunos4|'`
- ;;
- -solaris)
- os=-solaris2
- ;;
- -svr4*)
- os=-sysv4
- ;;
- -unixware*)
- os=-sysv4.2uw
- ;;
- -gnu/linux*)
- os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
- ;;
- # First accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST END IN A *, to match a version number.
- # -sysv* is not here because it comes later, after sysvr4.
- -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
- | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
- | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -chorusos* | -chorusrdb* \
- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
- | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
- | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
- | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
- | -os2* | -vos*)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
- -qnx*)
- case $basic_machine in
- x86-* | i*86-*)
- ;;
- *)
- os=-nto$os
- ;;
- esac
- ;;
- -nto*)
- os=-nto-qnx
- ;;
- -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
- | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
- | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
- ;;
- -mac*)
- os=`echo $os | sed -e 's|mac|macos|'`
- ;;
- -linux*)
- os=`echo $os | sed -e 's|linux|linux-gnu|'`
- ;;
- -sunos5*)
- os=`echo $os | sed -e 's|sunos5|solaris2|'`
- ;;
- -sunos6*)
- os=`echo $os | sed -e 's|sunos6|solaris3|'`
- ;;
- -opened*)
- os=-openedition
- ;;
- -wince*)
- os=-wince
- ;;
- -osfrose*)
- os=-osfrose
- ;;
- -osf*)
- os=-osf
- ;;
- -utek*)
- os=-bsd
- ;;
- -dynix*)
- os=-bsd
- ;;
- -acis*)
- os=-aos
- ;;
- -386bsd)
- os=-bsd
- ;;
- -ctix* | -uts*)
- os=-sysv
- ;;
- -ns2 )
- os=-nextstep2
- ;;
- -nsk*)
- os=-nsk
- ;;
- # Preserve the version number of sinix5.
- -sinix5.*)
- os=`echo $os | sed -e 's|sinix|sysv|'`
- ;;
- -sinix*)
- os=-sysv4
- ;;
- -triton*)
- os=-sysv3
- ;;
- -oss*)
- os=-sysv3
- ;;
- -svr4)
- os=-sysv4
- ;;
- -svr3)
- os=-sysv3
- ;;
- -sysvr4)
- os=-sysv4
- ;;
- # This must come after -sysvr4.
- -sysv*)
- ;;
- -ose*)
- os=-ose
- ;;
- -es1800*)
- os=-ose
- ;;
- -xenix)
- os=-xenix
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- os=-mint
- ;;
- -none)
- ;;
- *)
- # Get rid of the `-' at the beginning of $os.
- os=`echo $os | sed 's/[^-]*-//'`
- echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
- exit 1
- ;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system. Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
- *-acorn)
- os=-riscix1.2
- ;;
- arm*-rebel)
- os=-linux
- ;;
- arm*-semi)
- os=-aout
- ;;
- pdp10-*)
- os=-tops20
- ;;
- pdp11-*)
- os=-none
- ;;
- *-dec | vax-*)
- os=-ultrix4.2
- ;;
- m68*-apollo)
- os=-domain
- ;;
- i386-sun)
- os=-sunos4.0.2
- ;;
- m68000-sun)
- os=-sunos3
- # This also exists in the configure program, but was not the
- # default.
- # os=-sunos4
- ;;
- m68*-cisco)
- os=-aout
- ;;
- mips*-cisco)
- os=-elf
- ;;
- mips*-*)
- os=-elf
- ;;
- *-tti) # must be before sparc entry or we get the wrong os.
- os=-sysv3
- ;;
- sparc-* | *-sun)
- os=-sunos4.1.1
- ;;
- *-be)
- os=-beos
- ;;
- *-ibm)
- os=-aix
- ;;
- *-wec)
- os=-proelf
- ;;
- *-winbond)
- os=-proelf
- ;;
- *-oki)
- os=-proelf
- ;;
- *-hp)
- os=-hpux
- ;;
- *-hitachi)
- os=-hiux
- ;;
- i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- os=-sysv
- ;;
- *-cbm)
- os=-amigaos
- ;;
- *-dg)
- os=-dgux
- ;;
- *-dolphin)
- os=-sysv3
- ;;
- m68k-ccur)
- os=-rtu
- ;;
- m88k-omron*)
- os=-luna
- ;;
- *-next )
- os=-nextstep
- ;;
- *-sequent)
- os=-ptx
- ;;
- *-crds)
- os=-unos
- ;;
- *-ns)
- os=-genix
- ;;
- i370-*)
- os=-mvs
- ;;
- *-next)
- os=-nextstep3
- ;;
- *-gould)
- os=-sysv
- ;;
- *-highlevel)
- os=-bsd
- ;;
- *-encore)
- os=-bsd
- ;;
- *-sgi)
- os=-irix
- ;;
- *-siemens)
- os=-sysv4
- ;;
- *-masscomp)
- os=-rtu
- ;;
- f30[01]-fujitsu | f700-fujitsu)
- os=-uxpv
- ;;
- *-rom68k)
- os=-coff
- ;;
- *-*bug)
- os=-coff
- ;;
- *-apple)
- os=-macos
- ;;
- *-atari*)
- os=-mint
- ;;
- *)
- os=-none
- ;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer. We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
- *-unknown)
- case $os in
- -riscix*)
- vendor=acorn
- ;;
- -sunos*)
- vendor=sun
- ;;
- -aix*)
- vendor=ibm
- ;;
- -beos*)
- vendor=be
- ;;
- -hpux*)
- vendor=hp
- ;;
- -mpeix*)
- vendor=hp
- ;;
- -hiux*)
- vendor=hitachi
- ;;
- -unos*)
- vendor=crds
- ;;
- -dgux*)
- vendor=dg
- ;;
- -luna*)
- vendor=omron
- ;;
- -genix*)
- vendor=ns
- ;;
- -mvs* | -opened*)
- vendor=ibm
- ;;
- -ptx*)
- vendor=sequent
- ;;
- -vxsim* | -vxworks*)
- vendor=wrs
- ;;
- -aux*)
- vendor=apple
- ;;
- -hms*)
- vendor=hitachi
- ;;
- -mpw* | -macos*)
- vendor=apple
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- vendor=atari
- ;;
- -vos*)
- vendor=stratus
- ;;
- esac
- basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
- ;;
-esac
-
-echo $basic_machine$os
-exit 0
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/configure b/configure
deleted file mode 100755
index 8fc6a50..0000000
--- a/configure
+++ /dev/null
@@ -1,8320 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59.
-#
-# Copyright (C) 2003 Free Software Foundation, Inc.
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
- set -o posix
-fi
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
- LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
- LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
- LC_TELEPHONE LC_TIME
-do
- if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
- eval $as_var=C; export $as_var
- else
- $as_unset $as_var
- fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename "$0" ||
-$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" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.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
- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
- 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
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-as_executable_p="test -f"
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval 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="eval 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
-
-
-# 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
-ac_config_libobj_dir=.
-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="cgi/cgi.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"
-
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP LN_S AR RANLIB ac_ct_RANLIB SET_MAKE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA EGREP build build_cpu build_vendor build_os host host_cpu host_vendor host_os _ACJNI_JAVAC USE_MINGW32 APXS_PATH PERL RUBY BUILD_WRAPPERS JAVA_PATH JAVA_INCLUDE_PATH PYTHON PYTHON_INC PYTHON_LIB PYTHON_SITE EXTRA_UTL_SRC EXTRA_UTL_OBJS CSHARP_PATH LIBOBJS LTLIBOBJS'
-ac_subst_files=''
-
-# 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
-(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
- { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
- { (exit 1); exit 1; }; }
-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
-
-System types:
- --build=BUILD configure for building on BUILD [guessed]
- --host=HOST cross-compile to build programs to run on HOST [BUILD]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-
- cat <<\_ACEOF
-
-Optional Features:
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --disable-wdb Disables building of wdb
- --disable-compression Disables HTML Compression support
- --enable-remote-debugger Enables remote X CGI debugging
- --disable-apache Disables building of apache 1.3.x module
- --disable-python Disables building of python module
- --disable-perl Disables building of perl module
- --disable-ruby Disables building of ruby module
- --disable-java Disables building of java module
- --disable-csharp Disables building of csharp module
- --enable-gettext Enables gettext message translation
-
-Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-apache=path Set location of Apache installation
- --with-python=path Set location of Python Interpreter
- --with-perl=path Set location of Perl binary
- --with-ruby=path Set location of Ruby binary
- --with-java=path Set location of J2SDK
- --with-csharp=path Set location of csharp
-
-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
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
- case "$ac_dir" in
- .) ac_abs_builddir=`pwd`;;
- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
- *) ac_abs_builddir=`pwd`/"$ac_dir";;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
- case ${ac_top_builddir}. in
- .) ac_abs_top_builddir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
- case $ac_srcdir in
- .) ac_abs_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
- case $ac_top_srcdir in
- .) ac_abs_top_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
- esac;;
-esac
-
- 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 (C) 2003 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.59. 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.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_sep=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
- for ac_arg
- do
- case $ac_arg in
- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- continue ;;
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
- ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
- 2)
- ac_configure_args1="$ac_configure_args1 '$ac_arg'"
- if test $ac_must_keep_next = true; then
- ac_must_keep_next=false # Got value, back to normal.
- else
- case $ac_arg in
- *=* | --config-cache | -C | -disable-* | --disable-* \
- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
- | -with-* | --with-* | -without-* | --without-* | --x)
- case "$ac_configure_args0 " in
- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
- esac
- ;;
- -* ) ac_must_keep_next=true ;;
- esac
- fi
- ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
- # Get rid of the leading space.
- ac_sep=" "
- ;;
- esac
- done
-done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
-
-# 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
-
- cat <<\_ASBOX
-## ----------------- ##
-## Output variables. ##
-## ----------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=$`echo $ac_var`
- echo "$ac_var='"'"'$ac_val'"'"'"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- cat <<\_ASBOX
-## ------------- ##
-## Output files. ##
-## ------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=$`echo $ac_var`
- echo "$ac_var='"'"'$ac_val'"'"'"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- cat <<\_ASBOX
-## ----------- ##
-## confdefs.h. ##
-## ----------- ##
-_ASBOX
- echo
- sed "/^$/d" confdefs.h | sort
- echo
- fi
- test "$ac_signal" != 0 &&
- echo "$as_me: caught signal $ac_signal"
- echo "$as_me: exit $exit_status"
- } >&5
- rm -f 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 cs_config.h"
-
-
-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
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
- 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
-See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.exe b.out"
-# 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 file name" >&5
-echo $ECHO_N "checking for C compiler default output file name... $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=
-# b.out is created by i960 compilers.
-for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
- ;;
- conftest.$ac_ext )
- # This is the source file.
- ;;
- [ab].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,
- # but it would be cool to find out if it's true. Does anybody
- # maintain Libtool? --akim.
- export ac_cv_exeext
- break;;
- * )
- break;;
- esac
-done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details." >&5
-echo "$as_me: error: C compiler cannot create executables
-See \`config.log' for more details." >&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'.
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&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 b.out
-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 conftest.exe conftest conftest.*; do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
- *.* ) 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
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-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 | *.xSYM | *.bb | *.bbg ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-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>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_compiler_gnu=no
-fi
-rm -f conftest.err 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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_prog_cc_g=no
-fi
-rm -f conftest.err 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
-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_stdc+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_prog_cc_stdc=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std1 is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std1. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX -qlanglvl=ansi
-# Ultrix and OSF/1 -std1
-# HP-UX 10.20 and later -Ae
-# HP-UX older versions -Aa -D_HPUX_SOURCE
-# SVR4 -Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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_stdc=$ac_arg
-break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext
-done
-rm -f conftest.$ac_ext conftest.$ac_objext
-CC=$ac_save_CC
-
-fi
-
-case "x$ac_cv_prog_cc_stdc" in
- x|xno)
- echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
- *)
- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
- CC="$CC $ac_cv_prog_cc_stdc" ;;
-esac
-
-# 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>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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 \
- '' \
- '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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_declaration
-#include <stdlib.h>
-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>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_declaration
-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>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err 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
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err 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
-
-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.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # 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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- 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=$?
- grep -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
- ac_cpp_err=$ac_cpp_err$ac_c_werror_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
-sed 's/^/| /' 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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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=$?
- grep -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
- ac_cpp_err=$ac_cpp_err$ac_c_werror_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
-sed 's/^/| /' 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.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # 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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- 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=$?
- grep -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
- ac_cpp_err=$ac_cpp_err$ac_c_werror_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
-sed 's/^/| /' 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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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=$?
- grep -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
- ac_cpp_err=$ac_cpp_err$ac_c_werror_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
-sed 's/^/| /' 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
-See \`config.log' for more details." >&5
-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&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 whether ln -s works" >&5
-echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
- echo "$as_me:$LINENO: result: no, using $LN_S" >&5
-echo "${ECHO_T}no, using $LN_S" >&6
-fi
-
-for ac_prog in ar aal
-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_AR+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$AR"; then
- ac_cv_prog_AR="$AR" # 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_AR="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
- echo "$as_me:$LINENO: result: $AR" >&5
-echo "${ECHO_T}$AR" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- test -n "$AR" && break
-done
-test -n "$AR" || AR="ar"
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; 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_RANLIB+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # 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_RANLIB="${ac_tool_prefix}ranlib"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
- echo "$as_me:$LINENO: result: $RANLIB" >&5
-echo "${ECHO_T}$RANLIB" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
- ac_ct_RANLIB=$RANLIB
- # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; 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_RANLIB+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_RANLIB"; then
- ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # 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_RANLIB="ranlib"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
-echo "${ECHO_T}$ac_ct_RANLIB" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
- RANLIB=$ac_ct_RANLIB
-else
- RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-
-echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.make <<\_ACEOF
-all:
- @echo 'ac_maketemp="$(MAKE)"'
-_ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
-if test -n "$ac_maketemp"; then
- eval ac_cv_prog_make_${ac_make}_set=yes
-else
- eval ac_cv_prog_make_${ac_make}_set=no
-fi
-rm -f conftest.make
-fi
-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
- SET_MAKE=
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- SET_MAKE="MAKE=${MAKE-make}"
-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"
-# OS/2's system install, which has a completely different semantic
-# ./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/* | \
- ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
- /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'
-
-
-echo "$as_me:$LINENO: checking for Neotonic Paths" >&5
-echo $ECHO_N "checking for Neotonic Paths... $ECHO_C" >&6
-if test -d /neo/opt/include; then
- echo "$as_me:$LINENO: result: found" >&5
-echo "${ECHO_T}found" >&6
- CPPFLAGS="$CPPFLAGS -I/neo/opt/include"
- LDFLAGS="$LDFLAGS -L/neo/opt/lib"
-else
- echo "$as_me:$LINENO: result: not found" >&5
-echo "${ECHO_T}not found" >&6
-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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <$ac_hdr>
-
-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>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_Header=no"
-fi
-rm -f conftest.err 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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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 ();
-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>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err 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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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 ();
-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>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err 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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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 ();
-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>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err 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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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 ();
-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>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err 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
-
-
-echo "$as_me:$LINENO: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6
-if test "${ac_cv_prog_egrep+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if echo a | (grep -E '(a|b)') >/dev/null 2>&1
- then ac_cv_prog_egrep='grep -E'
- else ac_cv_prog_egrep='egrep'
- fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
-echo "${ECHO_T}$ac_cv_prog_egrep" >&6
- EGREP=$ac_cv_prog_egrep
-
-
-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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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_header_stdc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_header_stdc=no
-fi
-rm -f conftest.err conftest.$ac_objext 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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_header_stdc=no
-fi
-rm -f core *.core gmon.out bb.out 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
-
-echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5
-echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6
-if test "${ac_cv_header_sys_wait_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <sys/wait.h>
-#ifndef WEXITSTATUS
-# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
-#endif
-#ifndef WIFEXITED
-# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
-#endif
-
-int
-main ()
-{
- int s;
- wait (&s);
- s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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_header_sys_wait_h=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_header_sys_wait_h=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6
-if test $ac_cv_header_sys_wait_h = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_SYS_WAIT_H 1
-_ACEOF
-
-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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_Header=no"
-fi
-rm -f conftest.err 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 fcntl.h stdarg.h varargs.h limits.h strings.h sys/ioctl.h sys/time.h unistd.h features.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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.err 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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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=$?
- grep -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
- ac_cpp_err=$ac_cpp_err$ac_c_werror_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
-sed 's/^/| /' 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:$ac_c_preproc_warn_flag 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 compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- 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: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&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;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
- (
- cat <<\_ASBOX
-## ------------------------------------------ ##
-## Report this to the AC_PACKAGE_NAME lists. ##
-## ------------------------------------------ ##
-_ASBOX
- ) |
- sed "s/^/$as_me: WARNING: /" >&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
-
-
-echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
-echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
-if test "${ac_cv_c_const+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-/* FIXME: Include the comments suggested by Paul. */
-#ifndef __cplusplus
- /* Ultrix mips cc rejects this. */
- typedef int charset[2];
- const charset x;
- /* SunOS 4.1.1 cc rejects this. */
- char const *const *ccp;
- char **p;
- /* NEC SVR4.0.2 mips cc rejects this. */
- struct point {int x, y;};
- static struct point const zero = {0,0};
- /* AIX XL C 1.02.0.0 rejects this.
- It does not let you subtract one const X* pointer from another in
- an arm of an if-expression whose if-part is not a constant
- expression */
- const char *g = "string";
- ccp = &g + (g ? g-g : 0);
- /* HPUX 7.0 cc rejects these. */
- ++ccp;
- p = (char**) ccp;
- ccp = (char const *const *) p;
- { /* SCO 3.2v4 cc rejects this. */
- char *t;
- char const *s = 0 ? (char *) 0 : (char const *) 0;
-
- *t++ = 0;
- }
- { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
- int x[] = {25, 17};
- const int *foo = &x[0];
- ++foo;
- }
- { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
- typedef const int *iptr;
- iptr p = 0;
- ++p;
- }
- { /* AIX XL C 1.02.0.0 rejects this saying
- "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
- struct s { int j; const int *ap[3]; };
- struct s *b; b->j = 5;
- }
- { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
- const int foo = 10;
- }
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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_c_const=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_c_const=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
-echo "${ECHO_T}$ac_cv_c_const" >&6
-if test $ac_cv_c_const = no; then
-
-cat >>confdefs.h <<\_ACEOF
-#define const
-_ACEOF
-
-fi
-
-echo "$as_me:$LINENO: checking for mode_t" >&5
-echo $ECHO_N "checking for mode_t... $ECHO_C" >&6
-if test "${ac_cv_type_mode_t+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-if ((mode_t *) 0)
- return 0;
-if (sizeof (mode_t))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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_type_mode_t=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_type_mode_t=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_type_mode_t" >&5
-echo "${ECHO_T}$ac_cv_type_mode_t" >&6
-if test $ac_cv_type_mode_t = yes; then
- :
-else
-
-cat >>confdefs.h <<_ACEOF
-#define mode_t int
-_ACEOF
-
-fi
-
-echo "$as_me:$LINENO: checking for off_t" >&5
-echo $ECHO_N "checking for off_t... $ECHO_C" >&6
-if test "${ac_cv_type_off_t+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-if ((off_t *) 0)
- return 0;
-if (sizeof (off_t))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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_type_off_t=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_type_off_t=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
-echo "${ECHO_T}$ac_cv_type_off_t" >&6
-if test $ac_cv_type_off_t = yes; then
- :
-else
-
-cat >>confdefs.h <<_ACEOF
-#define off_t long
-_ACEOF
-
-fi
-
-echo "$as_me:$LINENO: checking for pid_t" >&5
-echo $ECHO_N "checking for pid_t... $ECHO_C" >&6
-if test "${ac_cv_type_pid_t+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-if ((pid_t *) 0)
- return 0;
-if (sizeof (pid_t))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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_type_pid_t=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_type_pid_t=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5
-echo "${ECHO_T}$ac_cv_type_pid_t" >&6
-if test $ac_cv_type_pid_t = yes; then
- :
-else
-
-cat >>confdefs.h <<_ACEOF
-#define pid_t int
-_ACEOF
-
-fi
-
-echo "$as_me:$LINENO: checking for size_t" >&5
-echo $ECHO_N "checking for size_t... $ECHO_C" >&6
-if test "${ac_cv_type_size_t+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-if ((size_t *) 0)
- return 0;
-if (sizeof (size_t))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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_type_size_t=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_type_size_t=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
-echo "${ECHO_T}$ac_cv_type_size_t" >&6
-if test $ac_cv_type_size_t = yes; then
- :
-else
-
-cat >>confdefs.h <<_ACEOF
-#define size_t unsigned
-_ACEOF
-
-fi
-
-echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
-echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6
-if test "${ac_cv_header_time+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <sys/time.h>
-#include <time.h>
-
-int
-main ()
-{
-if ((struct tm *) 0)
-return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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_header_time=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_header_time=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5
-echo "${ECHO_T}$ac_cv_header_time" >&6
-if test $ac_cv_header_time = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define TIME_WITH_SYS_TIME 1
-_ACEOF
-
-fi
-
-echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5
-echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6
-if test "${ac_cv_struct_tm+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <time.h>
-
-int
-main ()
-{
-struct tm *tp; tp->tm_sec;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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_struct_tm=time.h
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_struct_tm=sys/time.h
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5
-echo "${ECHO_T}$ac_cv_struct_tm" >&6
-if test $ac_cv_struct_tm = sys/time.h; then
-
-cat >>confdefs.h <<\_ACEOF
-#define TM_IN_SYS_TIME 1
-_ACEOF
-
-fi
-
-echo "$as_me:$LINENO: checking for struct tm.tm_zone" >&5
-echo $ECHO_N "checking for struct tm.tm_zone... $ECHO_C" >&6
-if test "${ac_cv_member_struct_tm_tm_zone+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <$ac_cv_struct_tm>
-
-
-int
-main ()
-{
-static struct tm ac_aggr;
-if (ac_aggr.tm_zone)
-return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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_member_struct_tm_tm_zone=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <$ac_cv_struct_tm>
-
-
-int
-main ()
-{
-static struct tm ac_aggr;
-if (sizeof ac_aggr.tm_zone)
-return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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_member_struct_tm_tm_zone=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_member_struct_tm_tm_zone=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_member_struct_tm_tm_zone" >&5
-echo "${ECHO_T}$ac_cv_member_struct_tm_tm_zone" >&6
-if test $ac_cv_member_struct_tm_tm_zone = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_TM_TM_ZONE 1
-_ACEOF
-
-
-fi
-
-if test "$ac_cv_member_struct_tm_tm_zone" = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_TM_ZONE 1
-_ACEOF
-
-else
- echo "$as_me:$LINENO: checking for tzname" >&5
-echo $ECHO_N "checking for tzname... $ECHO_C" >&6
-if test "${ac_cv_var_tzname+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <time.h>
-#ifndef tzname /* For SGI. */
-extern char *tzname[]; /* RS6000 and others reject char **tzname. */
-#endif
-
-int
-main ()
-{
-atoi(*tzname);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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_var_tzname=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_var_tzname=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_var_tzname" >&5
-echo "${ECHO_T}$ac_cv_var_tzname" >&6
- if test $ac_cv_var_tzname = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_TZNAME 1
-_ACEOF
-
- fi
-fi
-
-
-echo "$as_me:$LINENO: checking return type of signal handlers" >&5
-echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6
-if test "${ac_cv_type_signal+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <signal.h>
-#ifdef signal
-# undef signal
-#endif
-#ifdef __cplusplus
-extern "C" void (*signal (int, void (*)(int)))(int);
-#else
-void (*signal ()) ();
-#endif
-
-int
-main ()
-{
-int i;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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_type_signal=void
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_type_signal=int
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5
-echo "${ECHO_T}$ac_cv_type_signal" >&6
-
-cat >>confdefs.h <<_ACEOF
-#define RETSIGTYPE $ac_cv_type_signal
-_ACEOF
-
-
-
-for ac_func in strftime
-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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* 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 ();
-/* 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
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err 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
-
-else
- # strftime is in -lintl on SCO UNIX.
-echo "$as_me:$LINENO: checking for strftime in -lintl" >&5
-echo $ECHO_N "checking for strftime in -lintl... $ECHO_C" >&6
-if test "${ac_cv_lib_intl_strftime+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lintl $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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 strftime ();
-int
-main ()
-{
-strftime ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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_intl_strftime=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_intl_strftime=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_intl_strftime" >&5
-echo "${ECHO_T}$ac_cv_lib_intl_strftime" >&6
-if test $ac_cv_lib_intl_strftime = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_STRFTIME 1
-_ACEOF
-
-LIBS="-lintl $LIBS"
-fi
-
-fi
-done
-
-
-for ac_func in vprintf
-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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* 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 ();
-/* 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
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err 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
-
-echo "$as_me:$LINENO: checking for _doprnt" >&5
-echo $ECHO_N "checking for _doprnt... $ECHO_C" >&6
-if test "${ac_cv_func__doprnt+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define _doprnt to an innocuous variant, in case <limits.h> declares _doprnt.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define _doprnt innocuous__doprnt
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char _doprnt (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef _doprnt
-
-/* 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 _doprnt ();
-/* 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__doprnt) || defined (__stub____doprnt)
-choke me
-#else
-char (*f) () = _doprnt;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != _doprnt;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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_func__doprnt=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func__doprnt=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5
-echo "${ECHO_T}$ac_cv_func__doprnt" >&6
-if test $ac_cv_func__doprnt = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_DOPRNT 1
-_ACEOF
-
-fi
-
-fi
-done
-
-
-echo "$as_me:$LINENO: checking for wait3 that fills in rusage" >&5
-echo $ECHO_N "checking for wait3 that fills in rusage... $ECHO_C" >&6
-if test "${ac_cv_func_wait3_rusage+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$cross_compiling" = yes; then
- ac_cv_func_wait3_rusage=no
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-#include <stdio.h>
-/* HP-UX has wait3 but does not fill in rusage at all. */
-int
-main ()
-{
- struct rusage r;
- int i;
- /* Use a field that we can force nonzero --
- voluntary context switches.
- For systems like NeXT and OSF/1 that don't set it,
- also use the system CPU time. And page faults (I/O) for Linux. */
- r.ru_nvcsw = 0;
- r.ru_stime.tv_sec = 0;
- r.ru_stime.tv_usec = 0;
- r.ru_majflt = r.ru_minflt = 0;
- switch (fork ())
- {
- case 0: /* Child. */
- sleep(1); /* Give up the CPU. */
- _exit(0);
- break;
- case -1: /* What can we do? */
- _exit(0);
- break;
- default: /* Parent. */
- wait3(&i, 0, &r);
- /* Avoid "text file busy" from rm on fast HP-UX machines. */
- sleep(2);
- exit (r.ru_nvcsw == 0 && r.ru_majflt == 0 && r.ru_minflt == 0
- && r.ru_stime.tv_sec == 0 && r.ru_stime.tv_usec == 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
- ac_cv_func_wait3_rusage=yes
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_func_wait3_rusage=no
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_wait3_rusage" >&5
-echo "${ECHO_T}$ac_cv_func_wait3_rusage" >&6
-if test $ac_cv_func_wait3_rusage = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_WAIT3 1
-_ACEOF
-
-fi
-
-
-
-
-
-
-
-
-
-for ac_func in gettimeofday mktime putenv strerror strspn strtod strtol strtoul
-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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* 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 ();
-/* 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
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err 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
-
-
-
-
-for ac_func in random rand drand48
-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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* 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 ();
-/* 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
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err 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
-
-
-EXTRA_UTL_OBJS=
-EXTRA_UTL_SRC=
-cs_cv_wdb=no
-# Check whether --enable-apache or --disable-apache was given.
-if test "${enable_apache+set}" = set; then
- enableval="$enable_apache"
- if test $enableval = no; then
- echo "$as_me:$LINENO: result: Disabling wdb code" >&5
-echo "${ECHO_T}Disabling wdb code" >&6
- else
- echo "$as_me:$LINENO: checking for library containing db_open" >&5
-echo $ECHO_N "checking for library containing db_open... $ECHO_C" >&6
-if test "${ac_cv_search_db_open+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_func_search_save_LIBS=$LIBS
-ac_cv_search_db_open=no
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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 db_open ();
-int
-main ()
-{
-db_open ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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_db_open="none required"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-if test "$ac_cv_search_db_open" = no; then
- for ac_lib in db db2; do
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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 db_open ();
-int
-main ()
-{
-db_open ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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_db_open="-l$ac_lib"
-break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err 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_db_open" >&5
-echo "${ECHO_T}$ac_cv_search_db_open" >&6
-if test "$ac_cv_search_db_open" != no; then
- test "$ac_cv_search_db_open" = "none required" || LIBS="$ac_cv_search_db_open $LIBS"
- cs_cv_wdb=yes
-fi
-
- if test $cs_cv_wdb = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_DB2 1
-_ACEOF
-
- EXTRA_UTL_SRC="$EXTRA_UTL_SRC wdb.c"
- fi
- fi
-fi;
-
-echo "$as_me:$LINENO: checking for lockf" >&5
-echo $ECHO_N "checking for lockf... $ECHO_C" >&6
-if test "${ac_cv_func_lockf+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define lockf to an innocuous variant, in case <limits.h> declares lockf.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define lockf innocuous_lockf
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char lockf (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef lockf
-
-/* 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 lockf ();
-/* 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_lockf) || defined (__stub___lockf)
-choke me
-#else
-char (*f) () = lockf;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != lockf;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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_func_lockf=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_lockf=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_lockf" >&5
-echo "${ECHO_T}$ac_cv_func_lockf" >&6
-if test $ac_cv_func_lockf = yes; then
-
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_LOCKF 1
-_ACEOF
-
- EXTRA_UTL_SRC="$EXTRA_UTL_SRC ulocks.c rcfs.c"
-
- cs_cv_pthread=no
- if test "${ac_cv_header_pthread_h+set}" = set; then
- echo "$as_me:$LINENO: checking for pthread.h" >&5
-echo $ECHO_N "checking for pthread.h... $ECHO_C" >&6
-if test "${ac_cv_header_pthread_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_pthread_h" >&5
-echo "${ECHO_T}$ac_cv_header_pthread_h" >&6
-else
- # Is the header compilable?
-echo "$as_me:$LINENO: checking pthread.h usability" >&5
-echo $ECHO_N "checking pthread.h usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <pthread.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.err 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 pthread.h presence" >&5
-echo $ECHO_N "checking pthread.h presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <pthread.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=$?
- grep -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
- ac_cpp_err=$ac_cpp_err$ac_c_werror_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
-sed 's/^/| /' 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:$ac_c_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: pthread.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: pthread.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: pthread.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: pthread.h: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: pthread.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: pthread.h: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: pthread.h: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: pthread.h: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: pthread.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: pthread.h: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: pthread.h: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: pthread.h: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: pthread.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: pthread.h: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: pthread.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: pthread.h: in the future, the compiler will take precedence" >&2;}
- (
- cat <<\_ASBOX
-## ------------------------------------------ ##
-## Report this to the AC_PACKAGE_NAME lists. ##
-## ------------------------------------------ ##
-_ASBOX
- ) |
- sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-echo "$as_me:$LINENO: checking for pthread.h" >&5
-echo $ECHO_N "checking for pthread.h... $ECHO_C" >&6
-if test "${ac_cv_header_pthread_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_header_pthread_h=$ac_header_preproc
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_pthread_h" >&5
-echo "${ECHO_T}$ac_cv_header_pthread_h" >&6
-
-fi
-if test $ac_cv_header_pthread_h = yes; then
- cs_cv_pthread=yes
-fi
-
-
- if test $cs_cv_pthread = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_PTHREADS 1
-_ACEOF
-
- EXTRA_UTL_SRC="$EXTRA_UTL_SRC skiplist.c dict.c"
- fi
-
-fi
-
-
-# Make sure we can run config.sub.
-$ac_config_sub sun4 >/dev/null 2>&1 ||
- { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
-echo "$as_me: error: cannot run $ac_config_sub" >&2;}
- { (exit 1); exit 1; }; }
-
-echo "$as_me:$LINENO: checking build system type" >&5
-echo $ECHO_N "checking build system type... $ECHO_C" >&6
-if test "${ac_cv_build+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_build_alias=$build_alias
-test -z "$ac_cv_build_alias" &&
- ac_cv_build_alias=`$ac_config_guess`
-test -z "$ac_cv_build_alias" &&
- { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
-echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
- { (exit 1); exit 1; }; }
-ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
- { (exit 1); exit 1; }; }
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_build" >&5
-echo "${ECHO_T}$ac_cv_build" >&6
-build=$ac_cv_build
-build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-
-echo "$as_me:$LINENO: checking host system type" >&5
-echo $ECHO_N "checking host system type... $ECHO_C" >&6
-if test "${ac_cv_host+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_host_alias=$host_alias
-test -z "$ac_cv_host_alias" &&
- ac_cv_host_alias=$ac_cv_build_alias
-ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
- { (exit 1); exit 1; }; }
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_host" >&5
-echo "${ECHO_T}$ac_cv_host" >&6
-host=$ac_cv_host
-host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-
-case $host_os in
- *mingw32* ) MINGW32=yes;;
- * ) MINGW32=no;;
-esac
-
-if test "x$MINGW32" = "xyes"; then
- CPPFLAGS="$CPPFLAGS -D__WINDOWS_GCC__"
- USE_MINGW32="USE_MINGW32 = 1"
-else
- EXTRA_UTL_SRC="$EXTRA_UTL_SRC filter.c neo_net.c neo_server.c"
-fi
-
-cs_cv_snprintf=no
-SNPRINTFOBJS=""
-echo "$as_me:$LINENO: checking for snprintf" >&5
-echo $ECHO_N "checking for snprintf... $ECHO_C" >&6
-if test "${ac_cv_func_snprintf+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define snprintf to an innocuous variant, in case <limits.h> declares snprintf.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define snprintf innocuous_snprintf
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char snprintf (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef snprintf
-
-/* 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 snprintf ();
-/* 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_snprintf) || defined (__stub___snprintf)
-choke me
-#else
-char (*f) () = snprintf;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != snprintf;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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_func_snprintf=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_snprintf=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_snprintf" >&5
-echo "${ECHO_T}$ac_cv_func_snprintf" >&6
-if test $ac_cv_func_snprintf = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_SNPRINTF 1
-_ACEOF
-
-else
- cs_cv_snprintf=yes
-fi
-
-echo "$as_me:$LINENO: checking for vsnprintf" >&5
-echo $ECHO_N "checking for vsnprintf... $ECHO_C" >&6
-if test "${ac_cv_func_vsnprintf+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define vsnprintf to an innocuous variant, in case <limits.h> declares vsnprintf.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define vsnprintf innocuous_vsnprintf
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char vsnprintf (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef vsnprintf
-
-/* 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 vsnprintf ();
-/* 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_vsnprintf) || defined (__stub___vsnprintf)
-choke me
-#else
-char (*f) () = vsnprintf;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != vsnprintf;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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_func_vsnprintf=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_vsnprintf=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_vsnprintf" >&5
-echo "${ECHO_T}$ac_cv_func_vsnprintf" >&6
-if test $ac_cv_func_vsnprintf = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_VSNPRINTF 1
-_ACEOF
-
-else
- cs_cv_snprintf=yes
-fi
-
-if test $cs_cv_snprintf = yes; then
- EXTRA_UTL_OBJS="$EXTRA_UTL_OBJS snprintf.o"
-fi
-
-
-cs_cv_missing=no
-cs_cv_need_reentrant=no
-
-for ac_func in localtime_r
-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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* 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 ();
-/* 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
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err 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
-
- echo "$as_me:$LINENO: checking whether localtime_r is declared" >&5
-echo $ECHO_N "checking whether localtime_r is declared... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#include <time.h>
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "localtime_r" >/dev/null 2>&1; then
-
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_LOCALTIME_R 1
-_ACEOF
-
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
-
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- echo "$as_me:$LINENO: checking whether localtime_r with -D_REENTRANT is declared" >&5
-echo $ECHO_N "checking whether localtime_r with -D_REENTRANT is declared... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#define _REENTRANT
-#include <time.h>
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "localtime_r" >/dev/null 2>&1; then
-
- cs_cv_need_reentrant=yes
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
-
- cs_cv_missing=yes
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-rm -f conftest*
-
-fi
-rm -f conftest*
-
-else
- cs_cv_missing=yes
-fi
-done
-
-
-
-for ac_func in gmtime_r
-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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* 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 ();
-/* 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
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err 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
-
- echo "$as_me:$LINENO: checking whether gmtime_r is declared" >&5
-echo $ECHO_N "checking whether gmtime_r is declared... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#include <time.h>
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "gmtime_r" >/dev/null 2>&1; then
-
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_GMTIME_R 1
-_ACEOF
-
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
-
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- echo "$as_me:$LINENO: checking whether gmtime_r with -D_REENTRANT is declared" >&5
-echo $ECHO_N "checking whether gmtime_r with -D_REENTRANT is declared... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#define _REENTRANT
-#include <time.h>
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "gmtime_r" >/dev/null 2>&1; then
-
- cs_cv_need_reentrant=yes
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
-
- cs_cv_missing=yes
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-rm -f conftest*
-
-fi
-rm -f conftest*
-
-else
- cs_cv_missing=yes
-fi
-done
-
-
-
-for ac_func in strtok_r
-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
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* 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 ();
-/* 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
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err 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
-
- echo "$as_me:$LINENO: checking whether strtok_r is declared" >&5
-echo $ECHO_N "checking whether strtok_r is declared... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#include <string.h>
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "strtok_r" >/dev/null 2>&1; then
-
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_STRTOK_R 1
-_ACEOF
-
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
-
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- echo "$as_me:$LINENO: checking whether strtok_r with -D_REENTRANT is declared" >&5
-echo $ECHO_N "checking whether strtok_r with -D_REENTRANT is declared... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#define _REENTRANT
-#include <string.h>
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "strtok_r" >/dev/null 2>&1; then
-
- cs_cv_need_reentrant=yes
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
-
- cs_cv_missing=yes
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-rm -f conftest*
-
-fi
-rm -f conftest*
-
-else
- cs_cv_missing=yes
-fi
-done
-
-
-echo "$as_me:$LINENO: checking for mkstemp" >&5
-echo $ECHO_N "checking for mkstemp... $ECHO_C" >&6
-if test "${ac_cv_func_mkstemp+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define mkstemp to an innocuous variant, in case <limits.h> declares mkstemp.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define mkstemp innocuous_mkstemp
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char mkstemp (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef mkstemp
-
-/* 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 mkstemp ();
-/* 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_mkstemp) || defined (__stub___mkstemp)
-choke me
-#else
-char (*f) () = mkstemp;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != mkstemp;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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_func_mkstemp=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_mkstemp=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_mkstemp" >&5
-echo "${ECHO_T}$ac_cv_func_mkstemp" >&6
-if test $ac_cv_func_mkstemp = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_MKSTEMP 1
-_ACEOF
-
-else
- cs_cv_missing=yes
-fi
-
-if test $cs_cv_missing = yes; then
- EXTRA_UTL_OBJS="$EXTRA_UTL_OBJS missing.o"
-fi
-if test $cs_cv_need_reentrant = yes; then
- CPPFLAGS="$CPPFLAGS -D_REENTRANT"
-fi
-
-cs_cv_regex=yes
-echo "$as_me:$LINENO: checking for regexec" >&5
-echo $ECHO_N "checking for regexec... $ECHO_C" >&6
-if test "${ac_cv_func_regexec+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define regexec to an innocuous variant, in case <limits.h> declares regexec.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define regexec innocuous_regexec
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char regexec (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef regexec
-
-/* 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 regexec ();
-/* 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_regexec) || defined (__stub___regexec)
-choke me
-#else
-char (*f) () = regexec;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != regexec;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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_func_regexec=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_regexec=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_regexec" >&5
-echo "${ECHO_T}$ac_cv_func_regexec" >&6
-if test $ac_cv_func_regexec = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_REGEX 1
-_ACEOF
-
-else
- cs_cv_regex=no
-fi
-
-if test $cs_cv_regex = no; then
- CPPFLAGS="$CPPFLAGS -I\$(NEOTONIC_ROOT)/util/regex"
- EXTRA_UTL_SRC="$EXTRA_UTL_SRC regex/regex.c"
-fi
-
-cs_cv_compression=yes
-echo "$as_me:$LINENO: checking for deflate in -lz" >&5
-echo $ECHO_N "checking for deflate in -lz... $ECHO_C" >&6
-if test "${ac_cv_lib_z_deflate+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lz $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end 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 deflate ();
-int
-main ()
-{
-deflate ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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_z_deflate=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_z_deflate=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_z_deflate" >&5
-echo "${ECHO_T}$ac_cv_lib_z_deflate" >&6
-if test $ac_cv_lib_z_deflate = yes; then
- cs_cv_compression=yes
-else
- cs_cv_compression=no
-fi
-
-# Check whether --enable-compression or --disable-compression was given.
-if test "${enable_compression+set}" = set; then
- enableval="$enable_compression"
- if test $enableval = no; then
- cs_cv_compression=no;
- echo "$as_me:$LINENO: result: Disabling HTML Compression support" >&5
-echo "${ECHO_T}Disabling HTML Compression support" >&6
- fi
-fi;
-
-if test $cs_cv_compression = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HTML_COMPRESSION 1
-_ACEOF
-
- LIBS="$LIBS -lz"
-fi
-
-# Check whether --enable-remote-debugger or --disable-remote-debugger was given.
-if test "${enable_remote_debugger+set}" = set; then
- enableval="$enable_remote_debugger"
- if test $enableval = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define ENABLE_REMOTE_DEBUG 1
-_ACEOF
-
- echo "$as_me:$LINENO: result: Enabling CGI X Remote debugger" >&5
-echo "${ECHO_T}Enabling CGI X Remote debugger" >&6
- fi
-fi;
-
-cs_cv_apache=yes
-# Check whether --enable-apache or --disable-apache was given.
-if test "${enable_apache+set}" = set; then
- enableval="$enable_apache"
- if test $enableval = no; then
- cs_cv_apache=no;
- echo "$as_me:$LINENO: result: Disabling Apache 1.3.x Module" >&5
-echo "${ECHO_T}Disabling Apache 1.3.x Module" >&6
- fi
-fi;
-
-# Check whether --with-apache or --without-apache was given.
-if test "${with_apache+set}" = set; then
- withval="$with_apache"
- cs_cv_apache_path="$withval"
-else
- cs_cv_apache_path=
-fi;
-
-if test $cs_cv_apache = yes; then
- echo "$as_me:$LINENO: checking for apache apxs" >&5
-echo $ECHO_N "checking for apache apxs... $ECHO_C" >&6
- apxs_path=no
- apache_search_path="$cs_cv_apache_path /neo/opt /usr/local /usr"
- for path in $apache_search_path; do
- if test -x $path/httpd/bin/apxs; then
- apxs_path=$path/httpd/bin/apxs
- httpd_path=$path/httpd/bin/httpd
- break
- fi
- if test -x $path/httpd/sbin/apxs; then
- apxs_path=$path/httpd/sbin/apxs
- httpd_path=$path/httpd/sbin/httpd
- break
- fi
- if test -x $path/bin/apxs; then
- apxs_path=$path/bin/apxs
- httpd_path=$path/bin/httpd
- break
- fi
- if test -x $path/sbin/apxs; then
- apxs_path=$path/sbin/apxs
- httpd_path=$path/sbin/httpd
- break
- fi
- done
- if test "x$apxs_path" = "xno"; then
- echo "$as_me:$LINENO: result: not found" >&5
-echo "${ECHO_T}not found" >&6
- else
- echo "$as_me:$LINENO: result: found $apxs_path" >&5
-echo "${ECHO_T}found $apxs_path" >&6
- echo "$as_me:$LINENO: checking for apache 1.3.x" >&5
-echo $ECHO_N "checking for apache 1.3.x... $ECHO_C" >&6
- apache_version="`$httpd_path -v | grep 'Server version' | sed -e 's/.*Apache\/\([0-9]*\.[0-9]*\.[0-9]*\).*/\1/'`"
- apache_major_version=`echo $apache_version | sed -e 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1/'`
- apache_minor_version=`echo $apache_version | sed -e 's/.*\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\2/'`
- if test "$apache_major_version" = "1" -a "$apache_minor_version" = "3"; then
- echo "$as_me:$LINENO: result: found $apache_version" >&5
-echo "${ECHO_T}found $apache_version" >&6
- APXS_PATH="$apxs_path"
- BUILD_WRAPPERS="$BUILD_WRAPPERS mod_ecs"
- else
- echo "$as_me:$LINENO: result: found $apache_version - disabling module build" >&5
-echo "${ECHO_T}found $apache_version - disabling module build" >&6
- fi
- fi
-fi
-
-cs_cv_python=yes
-# Check whether --enable-python or --disable-python was given.
-if test "${enable_python+set}" = set; then
- enableval="$enable_python"
- if test $enableval = no; then
- cs_cv_python=no;
- echo "$as_me:$LINENO: result: Disabling python module" >&5
-echo "${ECHO_T}Disabling python module" >&6
- fi
-fi;
-
-# Check whether --with-python or --without-python was given.
-if test "${with_python+set}" = set; then
- withval="$with_python"
- cs_cv_python_path="$withval"
-else
- cs_cv_python_path=no
-fi;
-
-if test $cs_cv_python = yes; then
- echo "$as_me:$LINENO: checking for python includes" >&5
-echo $ECHO_N "checking for python includes... $ECHO_C" >&6
- python_inc=no
- python_lib=no
- python_search_path="/neo/opt /usr/local /usr /c"
- python_versions="2.4 2.3 2.2 2.1 2.0 1.5 24 23 22 21 20 15"
- if test $cs_cv_python_path != "no" -a -x $cs_cv_python_path; then
- python_bin=$cs_cv_python_path
- vers=`$python_bin -c "import sys; print sys.version[:3]"`
- py_inst_dir=`$python_bin -c "import sys; print sys.exec_prefix"`
- python_inc=$py_inst_dir/include/python$vers
- python_lib="-L$py_inst_dir/lib/python$vers/config -lpython$vers"
- python_site=$py_inst_dir/lib/python$vers/site-packages
- else
- for vers in $python_versions; do
- for path in $python_search_path; do
- if test -x $path/bin/python$vers; then
- python_bin=$path/bin/python$vers
- major_vers=`echo $vers | cut -b 1`
- if test $major_vers -ge 2; then
- python_base=`$python_bin -c "import sys, os; print os.path.dirname([x for x in sys.path if x.find('site-packages') != -1][0])"`
- else
- python_base=`$python_bin -c "import site, os; print os.path.dirname(site.sitedirs[0])"`
- fi
- if test -d $python_base; then
- python_lib="-L$python_base/config -lpython$vers"
- python_site=$python_base/site-packages
- fi
- fi
- if test -f $path/include/python$vers/Python.h; then
- python_inc=$path/include/python$vers
- fi
- if test "x$python_lib" = "xno"; then
- if test -d $path/lib/python$vers; then
- python_lib="-L$path/lib/python$vers/config -lpython$vers"
- python_site=$path/lib/python$vers/site-packages
- fi
- if test -d $path/lib64/python$vers; then
- python_lib="-L$path/lib64/python$vers/config -lpython$vers"
- python_site=$path/lib64/python$vers/site-packages
- fi
- fi
- if test -f $path/python$vers/include/Python.h; then
- python_inc=$path/python$vers/include
- python_lib="-L$path/python$vers/libs -lpython$vers"
- python_site=$path/python$vers/Lib/site-packages
- break 2
- fi
- if test "x$python_inc" != "xno" -a "x$python_lib" != "xno"; then
- break 2
- fi
- done
- done
- fi
- if test "x$python_inc" = "xno"; then
- echo "$as_me:$LINENO: result: not found" >&5
-echo "${ECHO_T}not found" >&6
- PYTHON=
- PYTHON_INC=
- PYTHON_LIB=
- PYTHON_SITE=
- else
- echo "$as_me:$LINENO: result: found $python_inc" >&5
-echo "${ECHO_T}found $python_inc" >&6
- PYTHON=$python_bin
- PYTHON_INC="-I$python_inc"
- PYTHON_LIB=$python_lib
- if test "x$PYTHON_SITE" = "x"; then
- PYTHON_SITE=$python_site
- fi
- BUILD_WRAPPERS="$BUILD_WRAPPERS python"
- fi
-fi
-
-cs_cv_perl=yes
-# Check whether --enable-perl or --disable-perl was given.
-if test "${enable_perl+set}" = set; then
- enableval="$enable_perl"
- if test $enableval = no; then
- cs_cv_perl=no;
- echo "$as_me:$LINENO: result: Disabling perl module" >&5
-echo "${ECHO_T}Disabling perl module" >&6
- fi
-fi;
-
-# Check whether --with-perl or --without-perl was given.
-if test "${with_perl+set}" = set; then
- withval="$with_perl"
- cs_cv_perl_path="$withval"
-else
- cs_cv_perl_path=no
-fi;
-
-if test $cs_cv_perl = yes; then
- echo "$as_me:$LINENO: checking for perl >= 5.006" >&5
-echo $ECHO_N "checking for perl >= 5.006... $ECHO_C" >&6
- perl_path=no
- perl_search_path="/neo/opt /usr/local /usr"
- if test $cs_cv_perl_path != "no" -a -x $cs_cv_perl_path; then
- perl_path=$cs_cv_perl_path
- else
- for path in $perl_search_path; do
- if test -x $path/bin/perl; then
- require_error=`$path/bin/perl -e 'require 5.006' 2>&1`
- if test "x$require_error" = "x"; then
- perl_path=$path/bin/perl
- break
- fi
- fi
- done
- fi
- if test "x$perl_path" = "xno"; then
- echo "$as_me:$LINENO: result: not found" >&5
-echo "${ECHO_T}not found" >&6
- PERL=
- else
- echo "$as_me:$LINENO: result: found $perl_path" >&5
-echo "${ECHO_T}found $perl_path" >&6
- PERL="$perl_path"
- BUILD_WRAPPERS="$BUILD_WRAPPERS perl"
- fi
-fi
-
-cs_cv_ruby=yes
-# Check whether --enable-ruby or --disable-ruby was given.
-if test "${enable_ruby+set}" = set; then
- enableval="$enable_ruby"
- if test $enableval = no; then
- cs_cv_ruby=no;
- echo "$as_me:$LINENO: result: Disabling ruby module" >&5
-echo "${ECHO_T}Disabling ruby module" >&6
- fi
-fi;
-
-# Check whether --with-ruby or --without-ruby was given.
-if test "${with_ruby+set}" = set; then
- withval="$with_ruby"
- cs_cv_ruby_path="$withval"
-else
- cs_cv_ruby_path=no
-fi;
-
-if test $cs_cv_ruby = yes; then
- echo "$as_me:$LINENO: checking for ruby" >&5
-echo $ECHO_N "checking for ruby... $ECHO_C" >&6
- ruby_path=no
- ruby_search_path="/neo/opt /usr/local /usr"
- if test $cs_cv_ruby_path != "no" -a -x $cs_cv_ruby_path; then
- ruby_path=$cs_cv_ruby_path
- else
- for path in $ruby_search_path; do
- if test -x $path/bin/ruby; then
- ruby_path=$path/bin/ruby
- break
- fi
- done
- fi
- if test "x$ruby_path" = "xno"; then
- echo "$as_me:$LINENO: result: not found" >&5
-echo "${ECHO_T}not found" >&6
- RUBY=
- else
- echo "$as_me:$LINENO: result: found $ruby_path" >&5
-echo "${ECHO_T}found $ruby_path" >&6
- RUBY="$ruby_path"
- BUILD_WRAPPERS="$BUILD_WRAPPERS ruby"
- fi
-fi
-
-cs_cv_java=yes
-# Check whether --enable-java or --disable-java was given.
-if test "${enable_java+set}" = set; then
- enableval="$enable_java"
- if test $enableval = no; then
- cs_cv_java=no;
- echo "$as_me:$LINENO: result: Disabling java module" >&5
-echo "${ECHO_T}Disabling java module" >&6
- fi
-fi;
-
-# Check whether --with-java or --without-java was given.
-if test "${with_java+set}" = set; then
- withval="$with_java"
- cs_cv_java_path="$withval"
-else
- cs_cv_java_path=no
-fi;
-
-if test $cs_cv_java = yes; then
- echo "$as_me:$LINENO: checking for j2sdk path" >&5
-echo $ECHO_N "checking for j2sdk path... $ECHO_C" >&6
- java_path=no
- if test $cs_cv_java_path != "no" -a -d $cs_cv_java_path; then
- java_path=$cs_cv_java_path
- else
- java_search_path="/neo/opt /usr/local /usr /usr/lib"
- for path in $java_search_path; do
- if test -d $path/java/j2sdk; then
- java_path=$path/java/j2sdk
- break
- fi
- if test -d $path/j2sdk; then
- java_path=$path/j2sdk
- break
- fi
- possible="$path/java/j2sdk*"
- for pos_path in $possible; do
- if test -d $pos_path; then
- java_path=$pos_path
- break 2
- fi
- done
- possible="$path/j2sdk*"
- for pos_path in $possible; do
- if test -d $pos_path; then
- java_path=$pos_path
- break 2
- fi
- done
- done
- fi
- if test "x$java_path" = "xno"; then
- echo "$as_me:$LINENO: result: not found" >&5
-echo "${ECHO_T}not found" >&6
- JAVA_PATH=
- JAVA_INCLUDE_PATH=
- else
- echo "$as_me:$LINENO: result: found $java_path" >&5
-echo "${ECHO_T}found $java_path" >&6
- JAVA_PATH="$java_path"
- JAVAC="$java_path/bin/javac"
- _ACJNI_JAVAC=$JAVAC
-
-
-JNI_INCLUDE_DIRS=""
-
-test "x$JAVAC" = x && { { echo "$as_me:$LINENO: error: '$JAVAC' undefined" >&5
-echo "$as_me: error: '$JAVAC' undefined" >&2;}
- { (exit 1); exit 1; }; }
-# Extract the first word of "$JAVAC", so it can be a program name with args.
-set dummy $JAVAC; 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_path__ACJNI_JAVAC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- case $_ACJNI_JAVAC in
- [\\/]* | ?:[\\/]*)
- ac_cv_path__ACJNI_JAVAC="$_ACJNI_JAVAC" # Let the user override the test with a path.
- ;;
- *)
- 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_path__ACJNI_JAVAC="$as_dir/$ac_word$ac_exec_ext"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
- test -z "$ac_cv_path__ACJNI_JAVAC" && ac_cv_path__ACJNI_JAVAC="no"
- ;;
-esac
-fi
-_ACJNI_JAVAC=$ac_cv_path__ACJNI_JAVAC
-
-if test -n "$_ACJNI_JAVAC"; then
- echo "$as_me:$LINENO: result: $_ACJNI_JAVAC" >&5
-echo "${ECHO_T}$_ACJNI_JAVAC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-test "x$_ACJNI_JAVAC" = xno && { { echo "$as_me:$LINENO: error: $JAVAC could not be found in path" >&5
-echo "$as_me: error: $JAVAC could not be found in path" >&2;}
- { (exit 1); exit 1; }; }
-
-
-# find the include directory relative to the javac executable
-_cur=""$_ACJNI_JAVAC""
-while ls -ld "$_cur" 2>/dev/null | grep " -> " >/dev/null; do
- echo "$as_me:$LINENO: checking symlink for $_cur" >&5
-echo $ECHO_N "checking symlink for $_cur... $ECHO_C" >&6
- _slink=`ls -ld "$_cur" | sed 's/.* -> //'`
- case "$_slink" in
- /*) _cur="$_slink";;
- # 'X' avoids triggering unwanted echo options.
- *) _cur=`echo "X$_cur" | sed -e 's/^X//' -e 's:[^/]*$::'`"$_slink";;
- esac
- echo "$as_me:$LINENO: result: $_cur" >&5
-echo "${ECHO_T}$_cur" >&6
-done
-_ACJNI_FOLLOWED="$_cur"
-
-_JTOPDIR=`echo "$_ACJNI_FOLLOWED" | sed -e 's://*:/:g' -e 's:/[^/]*$::'`
-case "$host_os" in
- darwin*) _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[^/]*$::'`
- _JINC="$_JTOPDIR/Headers";;
- *) _JINC="$_JTOPDIR/include";;
-esac
-if test -f "$_JINC/jni.h"; then
- JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JINC"
-else
- _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[^/]*$::'`
- if test -f "$_JTOPDIR/include/jni.h"; then
- JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include"
- else
- { { echo "$as_me:$LINENO: error: cannot find java include files" >&5
-echo "$as_me: error: cannot find java include files" >&2;}
- { (exit 1); exit 1; }; }
- fi
-fi
-
-# get the likely subdirectories for system specific java includes
-case "$host_os" in
-bsdi*) _JNI_INC_SUBDIRS="bsdos";;
-linux*) _JNI_INC_SUBDIRS="linux genunix";;
-osf*) _JNI_INC_SUBDIRS="alpha";;
-solaris*) _JNI_INC_SUBDIRS="solaris";;
-mingw*) _JNI_INC_SUBDIRS="win32";;
-cygwin*) _JNI_INC_SUBDIRS="win32";;
-*) _JNI_INC_SUBDIRS="genunix";;
-esac
-
-# add any subdirectories that are present
-for JINCSUBDIR in $_JNI_INC_SUBDIRS
-do
- if test -d "$_JTOPDIR/include/$JINCSUBDIR"; then
- JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include/$JINCSUBDIR"
- fi
-done
-
- for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS
- do
- JAVA_INCLUDE_PATH="$JAVA_INCLUDE_PATH -I$JNI_INCLUDE_DIR"
- done
- BUILD_WRAPPERS="$BUILD_WRAPPERS java-jni"
- fi
-fi
-
-cs_cv_csharp=yes
-# Check whether --enable-csharp or --disable-csharp was given.
-if test "${enable_csharp+set}" = set; then
- enableval="$enable_csharp"
- if test $enableval = no; then
- cs_cv_csharp=no;
- echo "$as_me:$LINENO: result: Disabling csharp module" >&5
-echo "${ECHO_T}Disabling csharp module" >&6
- fi
-fi;
-
-# Check whether --with-csharp or --without-csharp was given.
-if test "${with_csharp+set}" = set; then
- withval="$with_csharp"
- cs_cv_csharp_path="$withval"
-else
- cs_cv_csharp_path=no
-fi;
-if test $cs_cv_csharp = yes; then
- echo "$as_me:$LINENO: checking for csharp path" >&5
-echo $ECHO_N "checking for csharp path... $ECHO_C" >&6
- csharp_path=no
- if test $cs_cv_csharp_path != "no" -a -d $cs_cv_csharp_path; then
- csharp_path=$cs_cv_csharp_path
- else
- csharp_search_path="/neo/opt /usr/local /usr"
- for path in $csharp_search_path; do
- if test -f $path/bin/mcs; then
- csharp_path=$path
- break
- fi
- done
- fi
- if test "x$csharp_path" = "xno"; then
- echo "$as_me:$LINENO: result: not found" >&5
-echo "${ECHO_T}not found" >&6
- CSHARP_PATH=
- else
- echo "$as_me:$LINENO: result: found $csharp_path/bin/mcs" >&5
-echo "${ECHO_T}found $csharp_path/bin/mcs" >&6
- CSHARP_PATH="$csharp_path"
- BUILD_WRAPPERS="$BUILD_WRAPPERS dso csharp"
- fi
-fi
-
-# Check whether --enable-gettext or --disable-gettext was given.
-if test "${enable_gettext+set}" = set; then
- enableval="$enable_gettext"
- if test $enableval = yes; then
- echo "$as_me:$LINENO: checking for gettext" >&5
-echo $ECHO_N "checking for gettext... $ECHO_C" >&6
-if test "${ac_cv_func_gettext+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define gettext to an innocuous variant, in case <limits.h> declares gettext.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define gettext innocuous_gettext
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char gettext (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef gettext
-
-/* 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 gettext ();
-/* 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_gettext) || defined (__stub___gettext)
-choke me
-#else
-char (*f) () = gettext;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != gettext;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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_func_gettext=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_func_gettext=no
-fi
-rm -f conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_gettext" >&5
-echo "${ECHO_T}$ac_cv_func_gettext" >&6
-if test $ac_cv_func_gettext = yes; then
-
- cs_cv_libintl=no
- if test "${ac_cv_header_libintl_h+set}" = set; then
- echo "$as_me:$LINENO: checking for libintl.h" >&5
-echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6
-if test "${ac_cv_header_libintl_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5
-echo "${ECHO_T}$ac_cv_header_libintl_h" >&6
-else
- # Is the header compilable?
-echo "$as_me:$LINENO: checking libintl.h usability" >&5
-echo $ECHO_N "checking libintl.h usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <libintl.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (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); }; } &&
- { 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
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.err 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 libintl.h presence" >&5
-echo $ECHO_N "checking libintl.h presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <libintl.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=$?
- grep -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
- ac_cpp_err=$ac_cpp_err$ac_c_werror_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
-sed 's/^/| /' 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:$ac_c_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: libintl.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: libintl.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: libintl.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: libintl.h: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: libintl.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: libintl.h: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: libintl.h: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: libintl.h: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: libintl.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: libintl.h: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: libintl.h: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: libintl.h: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: libintl.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: libintl.h: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: libintl.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: libintl.h: in the future, the compiler will take precedence" >&2;}
- (
- cat <<\_ASBOX
-## ------------------------------------------ ##
-## Report this to the AC_PACKAGE_NAME lists. ##
-## ------------------------------------------ ##
-_ASBOX
- ) |
- sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-echo "$as_me:$LINENO: checking for libintl.h" >&5
-echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6
-if test "${ac_cv_header_libintl_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_header_libintl_h=$ac_header_preproc
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5
-echo "${ECHO_T}$ac_cv_header_libintl_h" >&6
-
-fi
-if test $ac_cv_header_libintl_h = yes; then
- cs_cv_libintl=yes
-fi
-
-
- if test $cs_cv_libintl = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define ENABLE_GETTEXT 1
-_ACEOF
-
- echo "$as_me:$LINENO: result: Enabling gettext message translation" >&5
-echo "${ECHO_T}Enabling gettext message translation" >&6
- else
- echo "$as_me:$LINENO: result: not found" >&5
-echo "${ECHO_T}not found" >&6
- fi
-
-fi
-
- fi
-fi;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ac_config_files="$ac_config_files rules.mk"
-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 overridden 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 diff $cache_file confcache >/dev/null 2>&1; 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
-
-ac_libobjs=
-ac_ltlibobjs=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_i=`echo "$ac_i" |
- sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
- # 2. Add them.
- ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
- ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: ${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
-ac_cs_recheck=false
-ac_cs_silent=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=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
- set -o posix
-fi
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
- LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
- LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
- LC_TELEPHONE LC_TIME
-do
- if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
- eval $as_var=C; export $as_var
- else
- $as_unset $as_var
- fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename "$0" ||
-$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" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.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
- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
- 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
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-as_executable_p="test -f"
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval 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="eval 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
-
-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.59. 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
- -q, --quiet do not print progress messages
- -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.59,
- with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
-
-Copyright (C) 2003 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[^=]*=\(.*\)'`
- ac_shift=:
- ;;
- -*)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- *) # This is not an option, so the user has probably given explicit
- # arguments.
- ac_option=$1
- ac_need_defaults=false;;
- esac
-
- case $ac_option in
- # Handling of the options.
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --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 )
- $ac_shift
- CONFIG_FILES="$CONFIG_FILES $ac_optarg"
- ac_need_defaults=false;;
- --header | --heade | --head | --hea )
- $ac_shift
- CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
- ac_need_defaults=false;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # 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
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
- exec 6>/dev/null
- ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-if \$ac_cs_recheck; then
- echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
- exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-fi
-
-_ACEOF
-
-
-
-
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_config_target in $ac_config_targets
-do
- case "$ac_config_target" in
- # Handling of arguments.
- "rules.mk" ) CONFIG_FILES="$CONFIG_FILES rules.mk" ;;
- "cs_config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS cs_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
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason to put it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# 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.
-
-{
- tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
- test -n "$tmp" && test -d "$tmp"
-} ||
-{
- tmp=./confstat$$-$RANDOM
- (umask 077 && mkdir $tmp)
-} ||
-{
- echo "$me: cannot create a temporary directory in ." >&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,@CPP@,$CPP,;t t
-s,@LN_S@,$LN_S,;t t
-s,@AR@,$AR,;t t
-s,@RANLIB@,$RANLIB,;t t
-s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
-s,@SET_MAKE@,$SET_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,@EGREP@,$EGREP,;t t
-s,@build@,$build,;t t
-s,@build_cpu@,$build_cpu,;t t
-s,@build_vendor@,$build_vendor,;t t
-s,@build_os@,$build_os,;t t
-s,@host@,$host,;t t
-s,@host_cpu@,$host_cpu,;t t
-s,@host_vendor@,$host_vendor,;t t
-s,@host_os@,$host_os,;t t
-s,@_ACJNI_JAVAC@,$_ACJNI_JAVAC,;t t
-s,@USE_MINGW32@,$USE_MINGW32,;t t
-s,@APXS_PATH@,$APXS_PATH,;t t
-s,@PERL@,$PERL,;t t
-s,@RUBY@,$RUBY,;t t
-s,@BUILD_WRAPPERS@,$BUILD_WRAPPERS,;t t
-s,@JAVA_PATH@,$JAVA_PATH,;t t
-s,@JAVA_INCLUDE_PATH@,$JAVA_INCLUDE_PATH,;t t
-s,@PYTHON@,$PYTHON,;t t
-s,@PYTHON_INC@,$PYTHON_INC,;t t
-s,@PYTHON_LIB@,$PYTHON_LIB,;t t
-s,@PYTHON_SITE@,$PYTHON_SITE,;t t
-s,@EXTRA_UTL_SRC@,$EXTRA_UTL_SRC,;t t
-s,@EXTRA_UTL_OBJS@,$EXTRA_UTL_OBJS,;t t
-s,@CSHARP_PATH@,$CSHARP_PATH,;t t
-s,@LIBOBJS@,$LIBOBJS,;t t
-s,@LTLIBOBJS@,$LTLIBOBJS,;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'`
- { if $as_mkdir_p; then
- mkdir -p "$ac_dir"
- else
- as_dir="$ac_dir"
- as_dirs=
- while test ! -d "$as_dir"; do
- as_dirs="$as_dir $as_dirs"
- as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- done
- test ! -n "$as_dirs" || mkdir $as_dirs
- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
- { (exit 1); exit 1; }; }; }
-
- 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
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
- case "$ac_dir" in
- .) ac_abs_builddir=`pwd`;;
- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
- *) ac_abs_builddir=`pwd`/"$ac_dir";;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
- case ${ac_top_builddir}. in
- .) ac_abs_top_builddir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
- case $ac_srcdir in
- .) ac_abs_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
- case $ac_top_srcdir in
- .) ac_abs_top_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
- esac;;
-esac
-
-
- case $INSTALL in
- [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
- esac
-
- # 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; }
-
- 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
-_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; }; }
- # Do quote $f, to prevent DOS paths from being IFS'd.
- 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 grep "^[ ]*#[ ]*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 # grep' >>$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 diff $ac_file $tmp/config.h >/dev/null 2>&1; 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'`
- { if $as_mkdir_p; then
- mkdir -p "$ac_dir"
- else
- as_dir="$ac_dir"
- as_dirs=
- while test ! -d "$as_dir"; do
- as_dirs="$as_dir $as_dirs"
- as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- done
- test ! -n "$as_dirs" || mkdir $as_dirs
- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
- { (exit 1); exit 1; }; }; }
-
- 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=:
- ac_config_status_args=
- test "$silent" = yes &&
- ac_config_status_args="$ac_config_status_args --quiet"
- exec 5>/dev/null
- $SHELL $CONFIG_STATUS $ac_config_status_args || 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
-
diff --git a/configure.in b/configure.in
deleted file mode 100644
index e5c5acb..0000000
--- a/configure.in
+++ /dev/null
@@ -1,512 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-AC_INIT(cgi/cgi.c)
-AC_CONFIG_HEADER(cs_config.h)
-
-dnl Checks for programs.
-AC_PROG_CC
-AC_PROG_CPP
-AC_PROG_LN_S
-AC_CHECK_PROGS(AR, ar aal, ar)
-AC_PROG_RANLIB
-
-AC_PROG_MAKE_SET
-AC_PROG_INSTALL
-
-dnl Checks for Neotonic Paths
-AC_MSG_CHECKING(for Neotonic Paths)
-if test -d /neo/opt/include; then
- AC_MSG_RESULT(found)
- CPPFLAGS="$CPPFLAGS -I/neo/opt/include"
- LDFLAGS="$LDFLAGS -L/neo/opt/lib"
-else
- AC_MSG_RESULT(not found)
-fi
-
-dnl Checks for header files.
-AC_HEADER_DIRENT
-AC_HEADER_STDC
-AC_HEADER_SYS_WAIT
-AC_CHECK_HEADERS(fcntl.h stdarg.h varargs.h limits.h strings.h sys/ioctl.h sys/time.h unistd.h features.h)
-
-dnl Checks for typedefs, structures, and compiler characteristics.
-AC_C_CONST
-AC_TYPE_MODE_T
-AC_TYPE_OFF_T
-AC_TYPE_PID_T
-AC_TYPE_SIZE_T
-AC_HEADER_TIME
-AC_STRUCT_TM
-AC_STRUCT_TIMEZONE
-
-dnl Checks for library functions.
-AC_TYPE_SIGNAL
-AC_FUNC_STRFTIME
-AC_FUNC_VPRINTF
-AC_FUNC_WAIT3
-AC_CHECK_FUNCS(gettimeofday mktime putenv strerror strspn strtod strtol strtoul)
-AC_CHECK_FUNCS(random rand drand48)
-
-dnl Checks for libraries.
-EXTRA_UTL_OBJS=
-EXTRA_UTL_SRC=
-cs_cv_wdb=no
-AC_ARG_ENABLE(apache, [ --disable-wdb Disables building of wdb],
- [if test $enableval = no; then
- AC_MSG_RESULT(Disabling wdb code)
- else
- AC_SEARCH_LIBS(db_open, db db2, [cs_cv_wdb=yes])
- if test $cs_cv_wdb = yes; then
- AC_DEFINE(HAVE_DB2)
- EXTRA_UTL_SRC="$EXTRA_UTL_SRC wdb.c"
- fi
- fi])
-
-dnl Check for locks
-AC_CHECK_FUNC(lockf, [
- AC_DEFINE(HAVE_LOCKF)
- EXTRA_UTL_SRC="$EXTRA_UTL_SRC ulocks.c rcfs.c"
-
- cs_cv_pthread=no
- AC_CHECK_HEADER(pthread.h, [cs_cv_pthread=yes])
- if test $cs_cv_pthread = yes; then
- AC_DEFINE(HAVE_PTHREADS)
- EXTRA_UTL_SRC="$EXTRA_UTL_SRC skiplist.c dict.c"
- fi
-])
-
-AC_MINGW32()
-if test "x$MINGW32" = "xyes"; then
- CPPFLAGS="$CPPFLAGS -D__WINDOWS_GCC__"
- USE_MINGW32="USE_MINGW32 = 1"
-else
- EXTRA_UTL_SRC="$EXTRA_UTL_SRC filter.c neo_net.c neo_server.c"
-fi
-
-dnl Check for snprintf and vsnprintf
-cs_cv_snprintf=no
-SNPRINTFOBJS=""
-AC_CHECK_FUNC(snprintf, [AC_DEFINE(HAVE_SNPRINTF)], [cs_cv_snprintf=yes])
-AC_CHECK_FUNC(vsnprintf, [AC_DEFINE(HAVE_VSNPRINTF)], [cs_cv_snprintf=yes])
-if test $cs_cv_snprintf = yes; then
- EXTRA_UTL_OBJS="$EXTRA_UTL_OBJS snprintf.o"
-fi
-
-
-dnl Check for missing re-entrant functions
-cs_cv_missing=no
-cs_cv_need_reentrant=no
-dnl copied from libcurl
-AC_CHECK_FUNCS(localtime_r, [
- AC_MSG_CHECKING(whether localtime_r is declared)
- AC_EGREP_CPP(localtime_r,[
-#include <time.h>],[
- AC_DEFINE(HAVE_LOCALTIME_R)
- AC_MSG_RESULT(yes)],[
- AC_MSG_RESULT(no)
- AC_MSG_CHECKING(whether localtime_r with -D_REENTRANT is declared)
- AC_EGREP_CPP(localtime_r,[
-#define _REENTRANT
-#include <time.h>],[
- cs_cv_need_reentrant=yes
- AC_MSG_RESULT(yes)],[
- cs_cv_missing=yes
- AC_MSG_RESULT(no)])])], [cs_cv_missing=yes])
-
-AC_CHECK_FUNCS(gmtime_r, [
- AC_MSG_CHECKING(whether gmtime_r is declared)
- AC_EGREP_CPP(gmtime_r,[
-#include <time.h>],[
- AC_DEFINE(HAVE_GMTIME_R)
- AC_MSG_RESULT(yes)],[
- AC_MSG_RESULT(no)
- AC_MSG_CHECKING(whether gmtime_r with -D_REENTRANT is declared)
- AC_EGREP_CPP(gmtime_r,[
-#define _REENTRANT
-#include <time.h>],[
- cs_cv_need_reentrant=yes
- AC_MSG_RESULT(yes)],[
- cs_cv_missing=yes
- AC_MSG_RESULT(no)])])], [cs_cv_missing=yes])
-
-AC_CHECK_FUNCS(strtok_r, [
- AC_MSG_CHECKING(whether strtok_r is declared)
- AC_EGREP_CPP(strtok_r,[
-#include <string.h>],[
- AC_DEFINE(HAVE_STRTOK_R)
- AC_MSG_RESULT(yes)],[
- AC_MSG_RESULT(no)
- AC_MSG_CHECKING(whether strtok_r with -D_REENTRANT is declared)
- AC_EGREP_CPP(strtok_r,[
-#define _REENTRANT
-#include <string.h>],[
- cs_cv_need_reentrant=yes
- AC_MSG_RESULT(yes)],[
- cs_cv_missing=yes
- AC_MSG_RESULT(no)])])], [cs_cv_missing=yes])
-
-AC_CHECK_FUNC(mkstemp, [AC_DEFINE(HAVE_MKSTEMP)], [cs_cv_missing=yes])
-if test $cs_cv_missing = yes; then
- EXTRA_UTL_OBJS="$EXTRA_UTL_OBJS missing.o"
-fi
-if test $cs_cv_need_reentrant = yes; then
- CPPFLAGS="$CPPFLAGS -D_REENTRANT"
-fi
-
-cs_cv_regex=yes
-AC_CHECK_FUNC(regexec, [AC_DEFINE(HAVE_REGEX)], [cs_cv_regex=no])
-if test $cs_cv_regex = no; then
- CPPFLAGS="$CPPFLAGS -I\$(NEOTONIC_ROOT)/util/regex"
- EXTRA_UTL_SRC="$EXTRA_UTL_SRC regex/regex.c"
-fi
-
-cs_cv_compression=yes
-AC_CHECK_LIB(z, deflate, [cs_cv_compression=yes], [cs_cv_compression=no])
-AC_ARG_ENABLE(compression, [ --disable-compression Disables HTML Compression support],
- [if test $enableval = no; then
- cs_cv_compression=no;
- AC_MSG_RESULT(Disabling HTML Compression support)
- fi])
-
-if test $cs_cv_compression = yes; then
- AC_DEFINE(HTML_COMPRESSION)
- LIBS="$LIBS -lz"
-fi
-
-AC_ARG_ENABLE(remote-debugger, [ --enable-remote-debugger Enables remote X CGI debugging],
- [if test $enableval = yes; then
- AC_DEFINE(ENABLE_REMOTE_DEBUG)
- AC_MSG_RESULT(Enabling CGI X Remote debugger)
- fi])
-
-dnl Check for Apache apxs
-cs_cv_apache=yes
-AC_ARG_ENABLE(apache, [ --disable-apache Disables building of apache 1.3.x module],
- [if test $enableval = no; then
- cs_cv_apache=no;
- AC_MSG_RESULT(Disabling Apache 1.3.x Module)
- fi])
-AC_ARG_WITH(apache, [ --with-apache=path Set location of Apache installation], [cs_cv_apache_path="$withval"], [cs_cv_apache_path=])
-
-if test $cs_cv_apache = yes; then
- AC_MSG_CHECKING(for apache apxs)
- apxs_path=no
- apache_search_path="$cs_cv_apache_path /neo/opt /usr/local /usr"
- for path in $apache_search_path; do
- if test -x $path/httpd/bin/apxs; then
- apxs_path=$path/httpd/bin/apxs
- httpd_path=$path/httpd/bin/httpd
- break
- fi
- if test -x $path/httpd/sbin/apxs; then
- apxs_path=$path/httpd/sbin/apxs
- httpd_path=$path/httpd/sbin/httpd
- break
- fi
- if test -x $path/bin/apxs; then
- apxs_path=$path/bin/apxs
- httpd_path=$path/bin/httpd
- break
- fi
- if test -x $path/sbin/apxs; then
- apxs_path=$path/sbin/apxs
- httpd_path=$path/sbin/httpd
- break
- fi
- done
- if test "x$apxs_path" = "xno"; then
- AC_MSG_RESULT(not found)
- else
- AC_MSG_RESULT(found $apxs_path)
- AC_MSG_CHECKING(for apache 1.3.x)
- changequote(<<, >>)dnl
- apache_version="`$httpd_path -v | grep 'Server version' | sed -e 's/.*Apache\/\([0-9]*\.[0-9]*\.[0-9]*\).*/\1/'`"
- apache_major_version=`echo $apache_version | sed -e 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1/'`
- apache_minor_version=`echo $apache_version | sed -e 's/.*\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\2/'`
- changequote([, ])dnl
- if test "$apache_major_version" = "1" -a "$apache_minor_version" = "3"; then
- AC_MSG_RESULT(found $apache_version)
- APXS_PATH="$apxs_path"
- BUILD_WRAPPERS="$BUILD_WRAPPERS mod_ecs"
- else
- AC_MSG_RESULT(found $apache_version - disabling module build)
- fi
- fi
-fi
-
-dnl Check for Python library/includes
-cs_cv_python=yes
-AC_ARG_ENABLE(python, [ --disable-python Disables building of python module],
- [if test $enableval = no; then
- cs_cv_python=no;
- AC_MSG_RESULT(Disabling python module)
- fi])
-AC_ARG_WITH(python, [ --with-python=path Set location of Python Interpreter], [cs_cv_python_path="$withval"], [cs_cv_python_path=no])
-
-if test $cs_cv_python = yes; then
- AC_MSG_CHECKING(for python includes)
- python_inc=no
- python_lib=no
- python_search_path="/neo/opt /usr/local /usr /c"
- python_versions="2.4 2.3 2.2 2.1 2.0 1.5 24 23 22 21 20 15"
- if test $cs_cv_python_path != "no" -a -x $cs_cv_python_path; then
- python_bin=$cs_cv_python_path
- vers=`$python_bin -c "import sys; print sys.version[[:3]]"`
- py_inst_dir=`$python_bin -c "import sys; print sys.exec_prefix"`
- python_inc=$py_inst_dir/include/python$vers
- python_lib="-L$py_inst_dir/lib/python$vers/config -lpython$vers"
- python_site=$py_inst_dir/lib/python$vers/site-packages
- else
- for vers in $python_versions; do
- for path in $python_search_path; do
- if test -x $path/bin/python$vers; then
- python_bin=$path/bin/python$vers
- major_vers=`echo $vers | cut -b 1`
- if test $major_vers -ge 2; then
- python_base=`$python_bin -c "import sys, os; print os.path.dirname([[x for x in sys.path if x.find('site-packages') != -1]][[0]])"`
- else
- python_base=`$python_bin -c "import site, os; print os.path.dirname(site.sitedirs[[0]])"`
- fi
- if test -d $python_base; then
- python_lib="-L$python_base/config -lpython$vers"
- python_site=$python_base/site-packages
- fi
- fi
- if test -f $path/include/python$vers/Python.h; then
- python_inc=$path/include/python$vers
- fi
- if test "x$python_lib" = "xno"; then
- if test -d $path/lib/python$vers; then
- python_lib="-L$path/lib/python$vers/config -lpython$vers"
- python_site=$path/lib/python$vers/site-packages
- fi
- if test -d $path/lib64/python$vers; then
- python_lib="-L$path/lib64/python$vers/config -lpython$vers"
- python_site=$path/lib64/python$vers/site-packages
- fi
- fi
- dnl This is currently special cased mostly for Windows
- dnl installs, but we only use python_lib for windows anyways
- if test -f $path/python$vers/include/Python.h; then
- python_inc=$path/python$vers/include
- python_lib="-L$path/python$vers/libs -lpython$vers"
- python_site=$path/python$vers/Lib/site-packages
- break 2
- fi
- if test "x$python_inc" != "xno" -a "x$python_lib" != "xno"; then
- break 2
- fi
- done
- done
- fi
- if test "x$python_inc" = "xno"; then
- AC_MSG_RESULT(not found)
- PYTHON=
- PYTHON_INC=
- PYTHON_LIB=
- PYTHON_SITE=
- else
- AC_MSG_RESULT(found $python_inc)
- PYTHON=$python_bin
- PYTHON_INC="-I$python_inc"
- PYTHON_LIB=$python_lib
- if test "x$PYTHON_SITE" = "x"; then
- PYTHON_SITE=$python_site
- fi
- BUILD_WRAPPERS="$BUILD_WRAPPERS python"
- fi
-fi
-
-dnl Check for Perl binary
-cs_cv_perl=yes
-AC_ARG_ENABLE(perl, [ --disable-perl Disables building of perl module],
- [if test $enableval = no; then
- cs_cv_perl=no;
- AC_MSG_RESULT(Disabling perl module)
- fi])
-AC_ARG_WITH(perl, [ --with-perl=path Set location of Perl binary], [cs_cv_perl_path="$withval"], [cs_cv_perl_path=no])
-
-if test $cs_cv_perl = yes; then
- AC_MSG_CHECKING(for perl >= 5.006)
- perl_path=no
- perl_search_path="/neo/opt /usr/local /usr"
- if test $cs_cv_perl_path != "no" -a -x $cs_cv_perl_path; then
- perl_path=$cs_cv_perl_path
- else
- for path in $perl_search_path; do
- if test -x $path/bin/perl; then
- require_error=`$path/bin/perl -e 'require 5.006' 2>&1`
- if test "x$require_error" = "x"; then
- perl_path=$path/bin/perl
- break
- fi
- fi
- done
- fi
- if test "x$perl_path" = "xno"; then
- AC_MSG_RESULT(not found)
- PERL=
- else
- AC_MSG_RESULT(found $perl_path)
- PERL="$perl_path"
- BUILD_WRAPPERS="$BUILD_WRAPPERS perl"
- fi
-fi
-
-dnl Check for Ruby binary
-cs_cv_ruby=yes
-AC_ARG_ENABLE(ruby, [ --disable-ruby Disables building of ruby module],
- [if test $enableval = no; then
- cs_cv_ruby=no;
- AC_MSG_RESULT(Disabling ruby module)
- fi])
-AC_ARG_WITH(ruby, [ --with-ruby=path Set location of Ruby binary], [cs_cv_ruby_path="$withval"], [cs_cv_ruby_path=no])
-
-if test $cs_cv_ruby = yes; then
- AC_MSG_CHECKING(for ruby)
- ruby_path=no
- ruby_search_path="/neo/opt /usr/local /usr"
- if test $cs_cv_ruby_path != "no" -a -x $cs_cv_ruby_path; then
- ruby_path=$cs_cv_ruby_path
- else
- for path in $ruby_search_path; do
- if test -x $path/bin/ruby; then
- ruby_path=$path/bin/ruby
- break
- fi
- done
- fi
- if test "x$ruby_path" = "xno"; then
- AC_MSG_RESULT(not found)
- RUBY=
- else
- AC_MSG_RESULT(found $ruby_path)
- RUBY="$ruby_path"
- BUILD_WRAPPERS="$BUILD_WRAPPERS ruby"
- fi
-fi
-
-dnl Check for Java library/includes
-cs_cv_java=yes
-AC_ARG_ENABLE(java, [ --disable-java Disables building of java module],
- [if test $enableval = no; then
- cs_cv_java=no;
- AC_MSG_RESULT(Disabling java module)
- fi])
-AC_ARG_WITH(java, [ --with-java=path Set location of J2SDK], [cs_cv_java_path="$withval"], [cs_cv_java_path=no])
-
-if test $cs_cv_java = yes; then
- AC_MSG_CHECKING(for j2sdk path)
- java_path=no
- if test $cs_cv_java_path != "no" -a -d $cs_cv_java_path; then
- java_path=$cs_cv_java_path
- else
- java_search_path="/neo/opt /usr/local /usr /usr/lib"
- for path in $java_search_path; do
- if test -d $path/java/j2sdk; then
- java_path=$path/java/j2sdk
- break
- fi
- if test -d $path/j2sdk; then
- java_path=$path/j2sdk
- break
- fi
- possible="$path/java/j2sdk*"
- for pos_path in $possible; do
- if test -d $pos_path; then
- java_path=$pos_path
- break 2
- fi
- done
- possible="$path/j2sdk*"
- for pos_path in $possible; do
- if test -d $pos_path; then
- java_path=$pos_path
- break 2
- fi
- done
- done
- fi
- if test "x$java_path" = "xno"; then
- AC_MSG_RESULT(not found)
- JAVA_PATH=
- JAVA_INCLUDE_PATH=
- else
- AC_MSG_RESULT(found $java_path)
- JAVA_PATH="$java_path"
- JAVAC="$java_path/bin/javac"
- _ACJNI_JAVAC=$JAVAC
- AC_JNI_INCLUDE_DIR
- for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS
- do
- JAVA_INCLUDE_PATH="$JAVA_INCLUDE_PATH -I$JNI_INCLUDE_DIR"
- done
- BUILD_WRAPPERS="$BUILD_WRAPPERS java-jni"
- fi
-fi
-
-dnl Check for C# library/includes
-cs_cv_csharp=yes
-AC_ARG_ENABLE(csharp, [ --disable-csharp Disables building of csharp module],
- [if test $enableval = no; then
- cs_cv_csharp=no;
- AC_MSG_RESULT(Disabling csharp module)
- fi])
-AC_ARG_WITH(csharp, [ --with-csharp=path Set location of csharp], [cs_cv_csharp_path="$withval"], [cs_cv_csharp_path=no])
-if test $cs_cv_csharp = yes; then
- AC_MSG_CHECKING(for csharp path)
- csharp_path=no
- if test $cs_cv_csharp_path != "no" -a -d $cs_cv_csharp_path; then
- csharp_path=$cs_cv_csharp_path
- else
- csharp_search_path="/neo/opt /usr/local /usr"
- for path in $csharp_search_path; do
- if test -f $path/bin/mcs; then
- csharp_path=$path
- break
- fi
- done
- fi
- if test "x$csharp_path" = "xno"; then
- AC_MSG_RESULT(not found)
- CSHARP_PATH=
- else
- AC_MSG_RESULT(found $csharp_path/bin/mcs)
- CSHARP_PATH="$csharp_path"
- BUILD_WRAPPERS="$BUILD_WRAPPERS dso csharp"
- fi
-fi
-
-AC_ARG_ENABLE(gettext, [ --enable-gettext Enables gettext message translation],
- [if test $enableval = yes; then
- dnl Check for gettext
- AC_CHECK_FUNC(gettext, [
- cs_cv_libintl=no
- AC_CHECK_HEADER(libintl.h, [cs_cv_libintl=yes])
- if test $cs_cv_libintl = yes; then
- AC_DEFINE(ENABLE_GETTEXT)
- AC_MSG_RESULT(Enabling gettext message translation)
- else
- AC_MSG_RESULT(not found)
- fi
- ])
- fi])
-
-
-AC_SUBST(RANLIB)
-AC_SUBST(AR)
-AC_SUBST(USE_MINGW32)
-AC_SUBST(APXS_PATH)
-AC_SUBST(PERL)
-AC_SUBST(RUBY)
-AC_SUBST(BUILD_WRAPPERS)
-AC_SUBST(JAVA_PATH)
-AC_SUBST(JAVA_INCLUDE_PATH)
-AC_SUBST(PYTHON)
-AC_SUBST(PYTHON_INC)
-AC_SUBST(PYTHON_LIB)
-AC_SUBST(PYTHON_SITE)
-AC_SUBST(EXTRA_UTL_SRC)
-AC_SUBST(EXTRA_UTL_OBJS)
-AC_SUBST(CSHARP_PATH)
-
-AC_OUTPUT(rules.mk)
diff --git a/contrib/cs-mode.el b/contrib/cs-mode.el
deleted file mode 100644
index 6e224c9..0000000
--- a/contrib/cs-mode.el
+++ /dev/null
@@ -1,50 +0,0 @@
-(defvar cs-font-lock-keywords
- (list
- '("<\\?cs[^\\?]*\\?>" 0 font-lock-keyword-face t)
- '("<\\?cs +\\(call\\|each\\|if\\|alt\\|var\\|include\\)" 1 font-lock-keyword-face t)
- '("<\\?cs +\\(/each\\|/if\\|/alt\\|/var\\|/include\\)" 1 font-lock-keyword-face t)
-
- ; variable names
- '("<\\?cs +var:\\([_0-9a-zA-Z\.]+\\)[^\\?]+\\?>" 1 font-lock-variable-name-face t)
- '("<\\?cs +alt:\\([_0-9a-zA-Z\.]+\\)[^\\?]+\\?>" 1 font-lock-variable-name-face t)
- '("<\\?cs +each:\\([_0-9a-zA-Z\.]+\\)[^\\?]+\\?>" 1 font-lock-variable-name-face t)
-
- ; string
- '("<\\?cs[^\"\\?]+\\(\"[^\"]+\"\\)[^\\?]+\\?>" 1 font-lock-string-face t)
-
-))
-
-(defvar cs-mode-map ())
-
-(if (not cs-mode-map)
- (progn
- (setq cs-mode-map (make-sparse-keymap))
- (define-key cs-mode-map "\C-c\C-i" 'cs-insert-tag)
- ))
-
-(defun cs-mode nil
- "ClearSilver mode"
-
- (interactive)
- (setq major-mode 'cs-mode)
- (setq mode-name "CS")
- (use-local-map cs-mode-map)
-
- (make-local-variable 'font-lock-defaults)
- (setq font-lock-defaults
- '((cs-font-lock-keywords) t))
-
- (setq font-lock-keywords cs-font-lock-keywords)
-
- (font-lock-mode 1)
-
- (run-hooks 'cs-mode-hook)
-
-)
-
-(defun cs-insert-tag ()
- (interactive)
- (insert "<?cs ?>")
- (backward-char 3)
-)
-
diff --git a/cs/Android.mk b/cs/Android.mk
deleted file mode 100644
index 885a246..0000000
--- a/cs/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := docs
-
-LOCAL_SRC_FILES:= \
- csparse.c
-
-LOCAL_C_INCLUDES := $(LOCAL_PATH)/..
-
-LOCAL_CFLAGS := -fPIC
-
-LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
-
-LOCAL_MODULE:= libneo_cs
-
-LOCAL_SHARED_LIBRARIES := libneo_util
-
-include $(BUILD_HOST_SHARED_LIBRARY)
-
-# this forces us into 64 bit mode, even though for the non-simulator builds we
-# mostly don't do that. Java on Hardy is 64 bit, and rather than finding a 32
-# bit java build, just build this in 64 bit.
-$(LOCAL_BUILT_MODULE): HOST_GLOBAL_CFLAGS:=
-$(LOCAL_BUILT_MODULE): HOST_GLOBAL_CPPFLAGS:=
diff --git a/cs/Makefile b/cs/Makefile
deleted file mode 100644
index 3e96152..0000000
--- a/cs/Makefile
+++ /dev/null
@@ -1,103 +0,0 @@
-
-
-ifeq ($(NEOTONIC_ROOT),)
-NEOTONIC_ROOT = ..
-endif
-
-include $(NEOTONIC_ROOT)/rules.mk
-
-CS_LIB = $(LIB_DIR)libneo_cs.a
-CS_SRC = csparse.c
-CS_OBJ = $(CS_SRC:%.c=%.o)
-
-CSTEST_EXE = cstest
-CSTEST_SRC = cstest.c
-CSTEST_OBJ = $(CSTEST_SRC:%.c=%.o)
-
-CSR_EXE = cs
-CSR_SRC = cs.c
-CSR_OBJ = $(CSR_SRC:%.c=%.o)
-
-CSDUMP_EXE = csdump
-CSDUMP_SRC = csdump.c
-CSDUMP_OBJ = $(CSDUMP_SRC:%.c=%.o)
-
-LIBS += -lneo_cs -lneo_utl # -lefence
-
-TARGETS = $(CS_LIB) $(CSTEST_EXE) $(CSR_EXE) test
-
-CS_TESTS = test.cs test2.cs test3.cs test4.cs test5.cs test6.cs test7.cs \
- test8.cs test9.cs test10.cs test11.cs test12.cs test13.cs \
- test14.cs test15.cs test16.cs test17.cs test18.cs test19.cs \
- test_var.cs test_paren.cs test_chuck.cs test_trak1.cs test_iter.cs \
- test_each_array.cs test_name.cs test_with.cs test_numbers.cs \
- test_splice.cs test_joo.cs test_first_last.cs test_abs_max_min.cs \
- test_comma.cs test_macro_set.cs test_func.cs test_escape.cs \
- test_uvar.cs test_crc.cs
-
-
-all: $(TARGETS)
-
-$(CS_LIB): $(CS_OBJ)
- $(AR) $@ $(CS_OBJ)
- $(RANLIB) $@
-
-$(CSTEST_EXE): $(CSTEST_OBJ) $(CS_LIB)
- $(LD) $@ $(CSTEST_OBJ) $(LDFLAGS) $(LIBS) # -lefence
-
-$(CSR_EXE): $(CSR_OBJ) $(CS_LIB)
- $(LD) $@ $(CSR_OBJ) $(LDFLAGS) $(LIBS) # -lefence
-
-$(CSDUMP_EXE): $(CSDUMP_OBJ) $(CS_LIB)
- $(LD) $@ $(CSDUMP_OBJ) $(LDFLAGS) $(LIBS)
-
-## BE VERY CAREFUL WHEN REGENERATING THESE
-gold: $(CSTEST_EXE)
- @for test in $(CS_TESTS); do \
- rm -f $$test.gold; \
- ./cstest test.hdf $$test > $$test.gold; \
- done; \
- ./cstest test_tag.hdf test_tag.cs > test_tag.cs.gold
- @echo "Generated Gold Files"
-
-test: $(CSTEST_EXE) $(CS_TESTS)
- @echo "Running cs regression tests"
- @failed=0; \
- for test in $(CS_TESTS); do \
- rm -f $$test.out; \
- ./cstest test.hdf $$test > $$test.out 2>&1; \
- diff $$test.out $$test.gold 2>&1 > /dev/null; \
- return_code=$$?; \
- if [ $$return_code -ne 0 ]; then \
- diff $$test.gold $$test.out > $$test.err; \
- echo "Failed Regression Test: $$test"; \
- echo " See $$test.out and $$test.err"; \
- failed=1; \
- fi; \
- done; \
- rm -f test_tag.cs.out; \
- ./cstest test_tag.hdf test_tag.cs> test_tag.cs.out 2>&1; \
- diff test_tag.cs.out test_tag.cs.gold; \
- return_code=$$?; \
- if [ $$return_code -ne 0 ]; then \
- echo "Failed Regression Test: test_tag.cs"; \
- failed=1; \
- fi; \
- if [ $$failed -eq 1 ]; then \
- exit 1; \
- fi;
- @touch test
- @echo "Passed"
-
-install: all
- $(NEOTONIC_ROOT)/mkinstalldirs $(DESTDIR)$(cs_includedir)/cs
- $(INSTALL) -m 644 cs.h $(DESTDIR)$(cs_includedir)/cs
- $(INSTALL) -m 644 $(CS_LIB) $(DESTDIR)$(libdir)
- $(INSTALL) $(CSTEST_EXE) $(DESTDIR)$(bindir)
- $(INSTALL) $(CSR_EXE) $(DESTDIR)$(bindir)
-
-clean:
- $(RM) core *.o
-
-distclean:
- $(RM) Makefile.depends $(TARGETS) core *.o *.out
diff --git a/cs/cs.c b/cs/cs.c
deleted file mode 100644
index a3d0f50..0000000
--- a/cs/cs.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include "cs.h"
-#include "util/neo_misc.h"
-#include "util/neo_hdf.h"
-
-static NEOERR *output (void *ctx, char *s)
-{
- printf ("%s", s);
- return STATUS_OK;
-}
-
-int main (int argc, char *argv[])
-{
- NEOERR *err;
- CSPARSE *parse;
- HDF *hdf;
- int verbose = 0;
- char *hdf_file, *cs_file;
- char c;
-
- extern char *optarg;
-
- err = hdf_init(&hdf);
- if (err != STATUS_OK)
- {
- nerr_log_error(err);
- return -1;
- }
-
- err = cs_init (&parse, hdf);
- if (err != STATUS_OK) {
- nerr_log_error(err);
- return -1;
- }
-
- while ((c = getopt(argc, argv, "Hvh:c:")) != EOF )
-
- switch (c) {
- case 'h':
- hdf_file=optarg;
- err = hdf_read_file(hdf, hdf_file);
- if (err != STATUS_OK) {
- nerr_log_error(err);
- return -1;
- }
- break;
- case 'c':
- cs_file=optarg;
- if ( verbose )
- printf ("Parsing %s\n", cs_file);
-
- err = cs_parse_file (parse, cs_file);
- if (err != STATUS_OK) {
- err = nerr_pass(err);
- nerr_log_error(err);
- return -1;
- }
- break;
- case 'v':
- verbose=1;
- break;
- case 'H':
- fprintf(stderr, "Usage: %s [-v] [-h <file.hdf>] [-c <file.cs>]\n", argv[0]);
- fprintf(stderr, " -h <file.hdf> load hdf file file.hdf (multiple allowed)\n");
- fprintf(stderr, " -c <file.cs> load cs file file.cs (multiple allowed)\n");
- fprintf(stderr, " -v verbose output\n");
- return -1;
- break;
- }
-
-
- err = cs_render(parse, NULL, output);
- if (err != STATUS_OK) {
- err = nerr_pass(err);
- nerr_log_error(err);
- return -1;
- }
-
- if (verbose) {
- printf ("\n-----------------------\nCS DUMP\n");
- err = cs_dump(parse, NULL, output);
- }
-
- cs_destroy (&parse);
-
- if (verbose) {
- printf ("\n-----------------------\nHDF DUMP\n");
- hdf_dump (hdf, NULL);
- }
-
- return 0;
-}
diff --git a/cs/cs.h b/cs/cs.h
deleted file mode 100644
index a46bd87..0000000
--- a/cs/cs.h
+++ /dev/null
@@ -1,486 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-/*
- * CS Syntax (pseudo BNF, pseudo accurate)
- * ------------------------------------------------------------------
- * CS := (ANYTHING COMMAND)*
- * CS_OPEN := <?cs
- * CS_CLOSE := ?>
- * COMMAND := (CMD_IF | CMD_VAR | CMD_EVAR | CMD_INCLUDE | CMD_EACH
- * | CMD_DEF | CMD_CALL | CMD_SET | CMD_LOOP )
- * CMD_IF := CS_OPEN IF CS_CLOSE CS CMD_ENDIF
- * CMD_ENDIF := CS_OPEN ENDIF CS_CLOSE
- * CMD_INCLUDE := CS_OPEN INCLUDE CS_CLOSE
- * CMD_DEF := CS_OPEN DEF CS_CLOSE
- * CMD_CALL := CS_OPEN CALL CS_CLOSE
- * CMD_SET := CS_OPEN SET CS_CLOSE
- * CMD_LOOP := CS_OPEN LOOP CS_CLOSE
- * LOOP := loop:VAR = EXPR, EXPR, EXPR
- * SET := set:VAR = EXPR
- * EXPR := (ARG | ARG OP EXPR)
- * CALL := call:VAR LPAREN ARG (,ARG)* RPAREN
- * DEF := def:VAR LPAREN ARG (,ARG)* RPAREN
- * INCLUDE := include:(VAR|STRING)
- * IF := (if:ARG OP ARG|if:ARG|if:!ARG)
- * ENDIF := /if
- * OP := ( == | != | < | <= | > | >= | || | && | + | - | * | / | % )
- * ARG := (STRING|VAR|NUM)
- * STRING := "[^"]"
- * VAR := [^"<> ]+
- * NUM := #[0-9]+
- */
-
-#ifndef __CSHDF_H_
-#define __CSHDF_H_ 1
-
-#include "util/neo_misc.h"
-#include "util/neo_err.h"
-#include "util/ulist.h"
-#include "util/neo_hdf.h"
-#include "util/neo_str.h"
-
-__BEGIN_DECLS
-
-typedef enum
-{
- /* Unary operators */
- CS_OP_NONE = (1<<0),
- CS_OP_EXISTS = (1<<1),
- CS_OP_NOT = (1<<2),
- CS_OP_NUM = (1<<3),
-
- /* Binary Operators */
- CS_OP_EQUAL = (1<<4),
- CS_OP_NEQUAL = (1<<5),
- CS_OP_LT = (1<<6),
- CS_OP_LTE = (1<<7),
- CS_OP_GT = (1<<8),
- CS_OP_GTE = (1<<9),
- CS_OP_AND = (1<<10),
- CS_OP_OR = (1<<11),
- CS_OP_ADD = (1<<12),
- CS_OP_SUB = (1<<13),
- CS_OP_MULT = (1<<14),
- CS_OP_DIV = (1<<15),
- CS_OP_MOD = (1<<16),
-
- /* Associative Operators */
- CS_OP_LPAREN = (1<<17),
- CS_OP_RPAREN = (1<<18),
- CS_OP_LBRACKET = (1<<19),
- CS_OP_RBRACKET = (1<<20),
-
- CS_OP_DOT = (1<<21),
- CS_OP_COMMA = (1<<22),
-
- /* Types */
- CS_TYPE_STRING = (1<<25),
- CS_TYPE_NUM = (1<<26),
- CS_TYPE_VAR = (1<<27),
- CS_TYPE_VAR_NUM = (1<<28),
-
- /* Not real types... */
- CS_TYPE_MACRO = (1<<29),
- CS_TYPE_FUNCTION = (1<<30)
-} CSTOKEN_TYPE;
-
-#define CS_OPS_UNARY (CS_OP_EXISTS | CS_OP_NOT | CS_OP_NUM | CS_OP_LPAREN)
-#define CS_TYPES (CS_TYPE_STRING | CS_TYPE_NUM | CS_TYPE_VAR | CS_TYPE_VAR_NUM)
-#define CS_OPS_LVALUE (CS_OP_DOT | CS_OP_LBRACKET | CS_TYPES)
-#define CS_TYPES_VAR (CS_TYPE_VAR | CS_TYPE_VAR_NUM)
-#define CS_TYPES_CONST (CS_TYPE_STRING | CS_TYPE_NUM)
-#define CS_ASSOC (CS_OP_RPAREN | CS_OP_RBRACKET)
-
-typedef struct _parse CSPARSE;
-typedef struct _funct CS_FUNCTION;
-typedef struct _escape_context CS_ECONTEXT;
-typedef struct _position CS_POSITION;
-typedef struct _error CS_ERROR;
-
-typedef struct _arg
-{
- CSTOKEN_TYPE op_type;
- char *argexpr;
- char *s;
- long int n;
- int alloc;
- struct _funct *function;
- struct _macro *macro;
- struct _arg *expr1;
- struct _arg *expr2;
- struct _arg *next;
-} CSARG;
-
-#define CSF_REQUIRED (1<<0)
-
-typedef struct _tree
-{
- int node_num;
- int cmd;
- int flags;
- NEOS_ESCAPE escape;
- CSARG arg1;
- CSARG arg2;
- CSARG *vargs;
-
- char *fname;
- int linenum;
- int colnum;
-
- struct _tree *case_0;
- struct _tree *case_1;
- struct _tree *next;
-} CSTREE;
-
-typedef struct _local_map
-{
- CSTOKEN_TYPE type;
- char *name;
- int map_alloc;
- /* These three (s,n,h) used to be a union, but now we sometimes allocate
- * a buffer in s with the "string" value of n, so its separate */
- char *s;
- long int n;
- HDF *h;
- int first; /* This local is the "first" item in an each/loop */
- int last; /* This local is the "last" item in an loop, each is calculated
- explicitly based on hdf_obj_next() in _builtin_last() */
- struct _local_map *next;
-} CS_LOCAL_MAP;
-
-typedef struct _macro
-{
- char *name;
- int n_args;
- CSARG *args;
-
- CSTREE *tree;
-
- struct _macro *next;
-} CS_MACRO;
-
-
-/* CSOUTFUNC is a callback function for where cs_render will render the
- * template to.
- * Technically, the char * for this func should be const char *, but that
- * would break existing code. */
-typedef NEOERR* (*CSOUTFUNC)(void *, char *);
-
-/* CSFUNCTION is a callback function used for handling a function made
- * available inside the template. Used by cs_register_function. Exposed
- * here as part of the experimental extension framework, this may change
- * in future versions. */
-typedef NEOERR* (*CSFUNCTION)(CSPARSE *parse, CS_FUNCTION *csf, CSARG *args,
- CSARG *result);
-
-/* CSSTRFUNC is a callback function for the more limited "string filter"
- * function handling. String filters only take a string and return a
- * string and have no "data" that is passed back, attempting to make them
- * "safe" from extensions that might try to do silly things like SQL queries.
- * */
-typedef NEOERR* (*CSSTRFUNC)(const char *str, char **ret);
-
-/* CSFILELOAD is a callback function to intercept file load requests and
- * provide templates via another mechanism. This way you can load templates
- * that you compiled-into your binary, from in-memory caches, or from a
- * zip file, etc. The HDF is provided so you can choose to use the
- * hdf_search_path function to find the file. contents should return
- * a full malloc copy of the contents of the file, which the parser will modify
- * and own and free. Use cs_register_fileload to set this function for
- * your CSPARSE context. */
-typedef NEOERR* (*CSFILELOAD)(void *ctx, HDF *hdf, const char *filename,
- char **contents);
-
-struct _funct
-{
- char *name;
- int name_len;
- int n_args;
- NEOS_ESCAPE escape; /* States escaping exemptions. default: NONE. */
-
- CSFUNCTION function;
- CSSTRFUNC str_func;
-
- struct _funct *next;
-};
-
-/* This structure maintains the necessary running state to manage
- * automatic escaping in tandem with the 'escape' directive. It is passed
- * around inside _parse.
- */
-struct _escape_context
-{
- NEOS_ESCAPE global_ctx; /* Contains global default escaping mode:
- none,html,js,url */
- NEOS_ESCAPE current; /* Used to pass around parse and evaluation specific
- data from subfunctions upward. */
- NEOS_ESCAPE next_stack; /* This is a big fat workaround. Since STACK_ENTRYs
- are only added to the stack after the
- command[].parse_handler() is called for the call
- it is being setup for, this is used to pass state
- forward. E.g. This is used for 'def' to set UNDEF
- escaping state to delay escaping status to
- evaluation time. */
- NEOS_ESCAPE when_undef; /* Contains the escaping context to be used when a
- UNDEF is being replaced at evaluation time. E.g.
- this is set in call_eval to force the macro code
- to get call's parsing context at eval time. */
-};
-
-/* This structure is used to track current location within the CS file being
- * parsed. This information is used to find the filename and line number for
- * each node.
- */
-struct _position {
- int line; /* Line number for current position */
- int col; /* Column number for current position */
- int cur_offset; /* The current position - commence reading from here */
-};
-
-struct _error {
- NEOERR *err;
- struct _error *next;
-};
-
-struct _parse
-{
- const char *context; /* A string identifying where the parser is parsing */
- int in_file; /* Indicates if current context is a file */
- int offset;
-
- int audit_mode; /* If in audit_mode, gather some extra information */
- CS_POSITION pos; /* Container for current position in CS file */
- CS_ERROR *err_list; /* List of non-fatal errors encountered */
-
- char *context_string;
- CS_ECONTEXT escaping; /* Context container for escape data */
-
- char *tag; /* Usually cs, but can be set via HDF Config.TagStart */
- int taglen;
-
- ULIST *stack;
- ULIST *alloc; /* list of strings owned by CSPARSE and free'd when
- its destroyed */
- CSTREE *tree;
- CSTREE *current;
- CSTREE **next;
-
- HDF *hdf;
-
- struct _parse *parent; /* set on internally created parse instances to point
- at the parent. This can be used for hierarchical
- scope in the future. */
-
- CS_LOCAL_MAP *locals;
- CS_MACRO *macros;
- CS_FUNCTION *functions;
-
- /* Output */
- void *output_ctx;
- CSOUTFUNC output_cb;
-
- void *fileload_ctx;
- CSFILELOAD fileload;
-
- /* Global hdf struct */
- /* smarti: Added for support for global hdf under local hdf */
- HDF *global_hdf;
-};
-
-/*
- * Function: cs_init - create and initialize a CS context
- * Description: cs_init will create a CSPARSE structure and initialize
- * it. This structure maintains the state and information
- * necessary for parsing and rendering a CS template.
- * Input: parse - a pointer to a pointer to a CSPARSE structure that
- * will be created
- * hdf - the HDF dataset to be used during parsing and rendering
- * Output: parse will contain a pointer to the allocated CSPARSE
- * structure. This structure will be deallocated with
- * cs_destroy()
- * Return: NERR_NOMEM
- * MT-Level: cs routines perform no locking, and neither do hdf
- * routines. They should be safe in an MT environment as long
- * as they are confined to a single thread.
- */
-NEOERR *cs_init (CSPARSE **parse, HDF *hdf);
-
-/*
- * Function: cs_parse_file - parse a CS template file
- * Description: cs_parse_file will parse the CS template located at
- * path. It will use hdf_search_path() if path does not
- * begin with a '/'. The parsed CS template will be
- * appended to the current parse tree stored in the CSPARSE
- * structure. The entire file is loaded into memory and
- * parsed in place.
- * Input: parse - a CSPARSE structure created with cs_init
- * path - the path to the file to parse
- * Output: None
- * Return: NERR_ASSERT - if path == NULL
- * NERR_NOT_FOUND - if path isn't found
- * NERR_SYSTEM - if path can't be accessed
- * NERR_NOMEM - unable to allocate memory to load file into memory
- * NERR_PARSE - error in CS template
- */
-NEOERR *cs_parse_file (CSPARSE *parse, const char *path);
-
-/*
- * Function: cs_parse_string - parse a CS template string
- * Description: cs_parse_string parses a string. The string is
- * modified, and internal references are kept by the parse
- * tree. For this reason, ownership of the string is
- * transfered to the CS system, and the string will be
- * free'd when cs_destroy() is called.
- * The parse information will be appended to the current
- * parse tree. During parse, the only HDF variables which
- * are evaluated are those used in evar or include
- * statements.
- * Input: parse - a CSPARSE structure created with cs_init
- * buf - the string to parse. Embedded NULLs are not currently
- * supported
- * blen - the length of the string
- * Output: None
- * Return: NERR_PARSE - error in CS template
- * NERR_NOMEM - unable to allocate memory for parse structures
- * NERR_NOT_FOUND - missing required variable
- */
-NEOERR *cs_parse_string (CSPARSE *parse, char *buf, size_t blen);
-
-/*
- * Function: cs_render - render a CS parse tree
- * Description: cs_render will evaluate a CS parse tree, calling the
- * CSOUTFUNC passed to it for output. Note that calling
- * cs_render multiple times on the same parse tree may or
- * may not render the same output as the set statement has
- * side-effects, it updates the HDF data used by the
- * render. Typically, you will call one of the cs_parse
- * functions before calling this function.
- * Input: parse - the CSPARSE structure containing the CS parse tree
- * that will be evaluated
- * ctx - user data that will be passed as the first variable to
- * the CSOUTFUNC.
- * cb - a CSOUTFUNC called to render the output. A CSOUTFUNC is
- * defined as:
- * typedef NEOERR* (*CSOUTFUNC)(void *, char *);
- * Output: None
- * Return: NERR_NOMEM - Unable to allocate memory for CALL or SET
- * functions
- * any error your callback functions returns
- */
-NEOERR *cs_render (CSPARSE *parse, void *ctx, CSOUTFUNC cb);
-
-/*
- * Function: cs_dump - dump the cs parse tree
- * Description: cs_dump will dump the CS parse tree in the parse struct.
- * This can be useful for debugging your templates.
- * This function also uses the CSOUTFUNC callback to
- * display the parse tree.
- * Input: parse - the CSPARSE structure created with cs_init
- * ctx - user data to be passed to the CSOUTFUNC
- * cb - a CSOUTFUNC callback
- * Output: None
- * Return: NERR_ASSERT if there is no parse tree
- * anything your CSOUTFUNC may return
- */
-NEOERR *cs_dump (CSPARSE *parse, void *ctx, CSOUTFUNC cb);
-
-/*
- * Function: cs_destroy - clean up and dealloc a parse tree
- * Description: cs_destroy will clean up all the memory associated with
- * a CSPARSE structure, including strings passed to
- * cs_parse_string. This does not clean up any memory
- * allocated by your own CSOUTFUNC or the HDF data
- * structure passed to cs_init. It is safe to call this
- * with a NULL pointer, and it will leave parse NULL as
- * well (ie, it can be called more than once on the same
- * var)
- * Input: parse - a pointer to a parse structure.
- * Output: parse - will be NULL
- * Return: None
- */
-void cs_destroy (CSPARSE **parse);
-
-/*
- * Function: cs_register_fileload - register a fileload function
- * Description: cs_register_fileload registers a fileload function that
- * overrides the built-in function. The built-in function
- * uses hdf_search_path and ne_file_load (based on stat/open/read)
- * to find and load the file on every template render.
- * You can override this function if you wish to provide
- * other template search functions, or load the template
- * from an in-memory cache, etc.
- * This fileload function will be used by cs_parse, including
- * any include: commands in the template.
- * Input: parse - a pointer to an initialized CSPARSE structure
- * ctx - pointer that is passed to the CSFILELOAD function when called
- * fileload - a CSFILELOAD function
- * Output: None
- * Return: None
- *
- */
-
-void cs_register_fileload(CSPARSE *parse, void *ctx, CSFILELOAD fileload);
-
-/*
- * Function: cs_register_strfunc - register a string handling function
- * Description: cs_register_strfunc will register a string function that
- * can be called during CS render. This not-callback is
- * designed to allow for string formating/escaping
- * functions that are not built-in to CS (since CS is not
- * HTML specific, for instance, but it is very useful to
- * have CS have functions for javascript/html/url
- * escaping). Note that we explicitly don't provide any
- * associated data or anything to attempt to keep you from
- * using this as a generic callback...
- * The format of a CSSTRFUNC is:
- * NEOERR * str_func(char *in, char **out);
- * This function should not modify the input string, and
- * should allocate the output string with a libc function.
- * (as we will call free on it)
- * Input: parse - a pointer to a CSPARSE structure initialized with cs_init()
- * funcname - the name for the CS function call
- * Note that registering a duplicate funcname will
- * raise a NERR_DUPLICATE error
- * str_func - a CSSTRFUNC not-callback
- * Return: NERR_NOMEM - failure to allocate any memory for data structures
- * NERR_DUPLICATE - funcname already registered
- *
- */
-NEOERR *cs_register_strfunc(CSPARSE *parse, char *funcname, CSSTRFUNC str_func);
-
-/*
- * Function: cs_register_esc_strfunc - cs_register_strfunc with escaping context
- * Description: cs_register_esc_strfunc functions exactly as cs_register_strfunc
- * except that it changes the evaluation escaping context to disable
- * default escaping.
- * Input: parse - a pointer to a CSPARSE structure initialized with cs_init()
- * funcname - the name for the CS function call
- * Note that registering a duplicate funcname will
- * raise a NERR_DUPLICATE error
- * str_func - a CSSTRFUNC not-callback
- * Return: NERR_NOMEM - failure to allocate any memory for data structures
- * NERR_DUPLICATE - funcname already registered
- *
- */
-NEOERR *cs_register_esc_strfunc(CSPARSE *parse, char *funcname,
- CSSTRFUNC str_func);
-
-/* Testing functions for future function api. This api may change in the
- * future. */
-NEOERR *cs_arg_parse(CSPARSE *parse, CSARG *args, const char *fmt, ...);
-NEOERR *cs_arg_parsev(CSPARSE *parse, CSARG *args, const char *fmt, va_list ap);
-NEOERR *cs_register_function(CSPARSE *parse, const char *funcname,
- int n_args, CSFUNCTION function);
-
-__END_DECLS
-
-#endif /* __CSHDF_H_ */
diff --git a/cs/csdump.c b/cs/csdump.c
deleted file mode 100644
index a9ff3dc..0000000
--- a/cs/csdump.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#include "cs_config.h"
-#include <stdio.h>
-#include "cs.h"
-#include "util/neo_misc.h"
-#include "util/neo_hdf.h"
-
-/*
-static NEOERR *output (void *ctx, char *s)
-{
- printf ("%s", s);
- return STATUS_OK;
-}
-*/
-
-int main (int argc, char *argv[])
-{
- NEOERR *err;
- CSPARSE *parse;
- HDF *hdf;
-
- if (argc < 3)
- {
- ne_warn ("Usage: csdump <file.cs> <output.c>");
- return -1;
- }
-
- err = hdf_init(&hdf);
- if (err != STATUS_OK)
- {
- nerr_log_error(err);
- return -1;
- }
-
- ne_warn ("Parsing %s", argv[1]);
- err = cs_init (&parse, hdf);
- if (err != STATUS_OK)
- {
- nerr_log_error(err);
- return -1;
- }
-
- err = cs_parse_file (parse, argv[1]);
- if (err != STATUS_OK)
- {
- err = nerr_pass(err);
- nerr_log_error(err);
- return -1;
- }
-
- err = cs_dump_c(parse, argv[2]);
-
- cs_destroy (&parse);
-
- return 0;
-}
diff --git a/cs/csparse.c b/cs/csparse.c
deleted file mode 100644
index 9df8f1e..0000000
--- a/cs/csparse.c
+++ /dev/null
@@ -1,4443 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-/*
- * TODO: there is some really ugly pseudo reference counting in here
- * for allocation of temporary strings (and passing references). See the alloc
- * member of various structs for details. We should move this to an arena
- * allocator so we can just allocate whenever we need to and just clean up
- * all the allocation at the end (may require two arenas: one for parese and
- * one for render)
- */
-
-#include "cs_config.h"
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <limits.h>
-#include <stdarg.h>
-
-#ifdef ENABLE_GETTEXT
-#include <libintl.h>
-#endif
-
-#include "util/neo_misc.h"
-#include "util/neo_err.h"
-#include "util/neo_files.h"
-#include "util/neo_str.h"
-#include "util/ulist.h"
-#include "cs.h"
-
-/* turn on some debug output for expressions */
-#define DEBUG_EXPR_PARSE 0
-#define DEBUG_EXPR_EVAL 0
-
-typedef enum
-{
- ST_SAME = 0,
- ST_GLOBAL = 1<<0,
- ST_IF = 1<<1,
- ST_ELSE = 1<<2,
- ST_EACH = 1<<3,
- ST_WITH = 1<<4,
- ST_POP = 1<<5,
- ST_DEF = 1<<6,
- ST_LOOP = 1<<7,
- ST_ALT = 1<<8,
- ST_ESCAPE = 1<<9,
-} CS_STATE;
-
-#define ST_ANYWHERE (ST_EACH | ST_WITH | ST_ELSE | ST_IF | ST_GLOBAL | ST_DEF | ST_LOOP | ST_ALT | ST_ESCAPE)
-
-typedef struct _stack_entry
-{
- CS_STATE state;
- NEOS_ESCAPE escape;
- CSTREE *tree;
- CSTREE *next_tree;
- int num_local;
- int location;
-} STACK_ENTRY;
-
-static NEOERR *literal_parse (CSPARSE *parse, int cmd, char *arg);
-static NEOERR *literal_eval (CSPARSE *parse, CSTREE *node, CSTREE **next);
-static NEOERR *name_parse (CSPARSE *parse, int cmd, char *arg);
-static NEOERR *name_eval (CSPARSE *parse, CSTREE *node, CSTREE **next);
-static NEOERR *var_parse (CSPARSE *parse, int cmd, char *arg);
-static NEOERR *var_eval (CSPARSE *parse, CSTREE *node, CSTREE **next);
-static NEOERR *evar_parse (CSPARSE *parse, int cmd, char *arg);
-static NEOERR *lvar_parse (CSPARSE *parse, int cmd, char *arg);
-static NEOERR *lvar_eval (CSPARSE *parse, CSTREE *node, CSTREE **next);
-static NEOERR *if_parse (CSPARSE *parse, int cmd, char *arg);
-static NEOERR *if_eval (CSPARSE *parse, CSTREE *node, CSTREE **next);
-static NEOERR *else_parse (CSPARSE *parse, int cmd, char *arg);
-static NEOERR *elif_parse (CSPARSE *parse, int cmd, char *arg);
-static NEOERR *endif_parse (CSPARSE *parse, int cmd, char *arg);
-static NEOERR *each_with_parse (CSPARSE *parse, int cmd, char *arg);
-static NEOERR *each_eval (CSPARSE *parse, CSTREE *node, CSTREE **next);
-static NEOERR *with_eval (CSPARSE *parse, CSTREE *node, CSTREE **next);
-static NEOERR *end_parse (CSPARSE *parse, int cmd, char *arg);
-static NEOERR *include_parse (CSPARSE *parse, int cmd, char *arg);
-static NEOERR *linclude_parse (CSPARSE *parse, int cmd, char *arg);
-static NEOERR *linclude_eval (CSPARSE *parse, CSTREE *node, CSTREE **next);
-static NEOERR *def_parse (CSPARSE *parse, int cmd, char *arg);
-static NEOERR *skip_eval (CSPARSE *parse, CSTREE *node, CSTREE **next);
-static NEOERR *call_parse (CSPARSE *parse, int cmd, char *arg);
-static NEOERR *call_eval (CSPARSE *parse, CSTREE *node, CSTREE **next);
-static NEOERR *set_parse (CSPARSE *parse, int cmd, char *arg);
-static NEOERR *set_eval (CSPARSE *parse, CSTREE *node, CSTREE **next);
-static NEOERR *loop_parse (CSPARSE *parse, int cmd, char *arg);
-static NEOERR *loop_eval (CSPARSE *parse, CSTREE *node, CSTREE **next);
-static NEOERR *alt_parse (CSPARSE *parse, int cmd, char *arg);
-static NEOERR *alt_eval (CSPARSE *parse, CSTREE *node, CSTREE **next);
-static NEOERR *escape_parse (CSPARSE *parse, int cmd, char *arg);
-static NEOERR *escape_eval (CSPARSE *parse, CSTREE *node, CSTREE **next);
-
-static NEOERR *render_node (CSPARSE *parse, CSTREE *node);
-static NEOERR *cs_init_internal (CSPARSE **parse, HDF *hdf, CSPARSE *parent);
-static int rearrange_for_call(CSARG **args);
-
-typedef struct _cmds
-{
- char *cmd;
- int cmdlen;
- CS_STATE allowed_state;
- CS_STATE next_state;
- NEOERR* (*parse_handler)(CSPARSE *parse, int cmd, char *arg);
- NEOERR* (*eval_handler)(CSPARSE *parse, CSTREE *node, CSTREE **next);
- int has_arg;
-} CS_CMDS;
-
-CS_CMDS Commands[] = {
- {"literal", sizeof("literal")-1, ST_ANYWHERE, ST_SAME,
- literal_parse, literal_eval, 0},
- {"name", sizeof("name")-1, ST_ANYWHERE, ST_SAME,
- name_parse, name_eval, 1},
- {"var", sizeof("var")-1, ST_ANYWHERE, ST_SAME,
- var_parse, var_eval, 1},
- {"uvar", sizeof("uvar")-1, ST_ANYWHERE, ST_SAME,
- var_parse, var_eval, 1},
- {"evar", sizeof("evar")-1, ST_ANYWHERE, ST_SAME,
- evar_parse, skip_eval, 1},
- {"lvar", sizeof("lvar")-1, ST_ANYWHERE, ST_SAME,
- lvar_parse, lvar_eval, 1},
- {"if", sizeof("if")-1, ST_ANYWHERE, ST_IF,
- if_parse, if_eval, 1},
- {"else", sizeof("else")-1, ST_IF, ST_POP | ST_ELSE,
- else_parse, skip_eval, 0},
- {"elseif", sizeof("elseif")-1, ST_IF, ST_SAME,
- elif_parse, if_eval, 1},
- {"elif", sizeof("elif")-1, ST_IF, ST_SAME,
- elif_parse, if_eval, 1},
- {"/if", sizeof("/if")-1, ST_IF | ST_ELSE, ST_POP,
- endif_parse, skip_eval, 0},
- {"each", sizeof("each")-1, ST_ANYWHERE, ST_EACH,
- each_with_parse, each_eval, 1},
- {"/each", sizeof("/each")-1, ST_EACH, ST_POP,
- end_parse, skip_eval, 0},
- {"with", sizeof("each")-1, ST_ANYWHERE, ST_WITH,
- each_with_parse, with_eval, 1},
- {"/with", sizeof("/with")-1, ST_WITH, ST_POP,
- end_parse, skip_eval, 0},
- {"include", sizeof("include")-1, ST_ANYWHERE, ST_SAME,
- include_parse, skip_eval, 1},
- {"linclude", sizeof("linclude")-1, ST_ANYWHERE, ST_SAME,
- linclude_parse, linclude_eval, 1},
- {"def", sizeof("def")-1, ST_ANYWHERE, ST_DEF,
- def_parse, skip_eval, 1},
- {"/def", sizeof("/def")-1, ST_DEF, ST_POP,
- end_parse, skip_eval, 0},
- {"call", sizeof("call")-1, ST_ANYWHERE, ST_SAME,
- call_parse, call_eval, 1},
- {"set", sizeof("set")-1, ST_ANYWHERE, ST_SAME,
- set_parse, set_eval, 1},
- {"loop", sizeof("loop")-1, ST_ANYWHERE, ST_LOOP,
- loop_parse, loop_eval, 1},
- {"/loop", sizeof("/loop")-1, ST_LOOP, ST_POP,
- end_parse, skip_eval, 1},
- {"alt", sizeof("alt")-1, ST_ANYWHERE, ST_ALT,
- alt_parse, alt_eval, 1},
- {"/alt", sizeof("/alt")-1, ST_ALT, ST_POP,
- end_parse, skip_eval, 1},
- {"escape", sizeof("escape")-1, ST_ANYWHERE, ST_ESCAPE,
- escape_parse, escape_eval, 1},
- {"/escape", sizeof("/escape")-1, ST_ESCAPE, ST_POP,
- end_parse, skip_eval, 1},
- {NULL},
-};
-
-/* Possible Config.VarEscapeMode values */
-typedef struct _escape_modes
-{
- char *mode; /* Add space for NUL */
- NEOS_ESCAPE context; /* Context of the name */
-} CS_ESCAPE_MODES;
-
-CS_ESCAPE_MODES EscapeModes[] = {
- {"none", NEOS_ESCAPE_NONE},
- {"html", NEOS_ESCAPE_HTML},
- {"js", NEOS_ESCAPE_SCRIPT},
- {"url", NEOS_ESCAPE_URL},
- {NULL},
-};
-
-
-/* **** CS alloc/dealloc ******************************************** */
-
-static int NodeNumber = 0;
-
-static void init_node_pos(CSTREE *node, CSPARSE *parse)
-{
- CS_POSITION *pos = &parse->pos;
- char *data;
-
- if (parse->offset < pos->cur_offset) {
- /* Oops, we went backwards in file, is this an error? */
- node->linenum = -1;
- node->colnum = parse->offset;
- return;
- }
-
- /* Start counting from 1 not 0 */
- if (pos->line == 0) pos->line = 1;
- if (pos->col == 0) pos->col = 1;
-
- if (parse->context == NULL) {
- /* Not in a file */
- node->fname = NULL;
- }
- else {
- node->fname = strdup(parse->context);
- if (node->fname == NULL) {
- /* malloc error, cannot proceed */
- node->linenum = -1;
- return;
- }
- }
-
- data = parse->context_string;
- if (data == NULL) {
- node->linenum = -1;
- return;
- }
-
- while (pos->cur_offset < parse->offset) {
- if (data[pos->cur_offset] == '\n') {
- pos->line++;
- pos->col = 1;
- }
- else {
- pos->col++;
- }
-
- pos->cur_offset++;
- }
-
- node->linenum = pos->line;
- node->colnum = pos->col;
-
- return;
-
-}
-
-static NEOERR *alloc_node (CSTREE **node, CSPARSE *parse)
-{
- CSTREE *my_node;
-
- *node = NULL;
- my_node = (CSTREE *) calloc (1, sizeof (CSTREE));
- if (my_node == NULL)
- return nerr_raise (NERR_NOMEM, "Unable to allocate memory for node");
-
- my_node->cmd = 0;
- my_node->node_num = NodeNumber++;
-
- *node = my_node;
-
- if (parse->audit_mode) {
- init_node_pos(my_node, parse);
- }
- return STATUS_OK;
-}
-
-/* TODO: make these deallocations linear and not recursive */
-static void dealloc_arg (CSARG **arg)
-{
- CSARG *p;
-
- if (*arg == NULL) return;
- p = *arg;
- if (p->expr1) dealloc_arg (&(p->expr1));
- if (p->expr2) dealloc_arg (&(p->expr2));
- if (p->next) dealloc_arg (&(p->next));
-
- if (p->argexpr) free(p->argexpr);
-
- free(p);
- *arg = NULL;
-}
-
-static void dealloc_node (CSTREE **node)
-{
- CSTREE *my_node;
-
- if (*node == NULL) return;
- my_node = *node;
- if (my_node->case_0) dealloc_node (&(my_node->case_0));
- if (my_node->case_1) dealloc_node (&(my_node->case_1));
- if (my_node->next) dealloc_node (&(my_node->next));
- if (my_node->vargs) dealloc_arg (&(my_node->vargs));
- if (my_node->arg1.expr1) dealloc_arg (&(my_node->arg1.expr1));
- if (my_node->arg1.expr2) dealloc_arg (&(my_node->arg1.expr2));
- if (my_node->arg1.next) dealloc_arg (&(my_node->arg1.next));
- if (my_node->arg2.expr1) dealloc_arg (&(my_node->arg2.expr1));
- if (my_node->arg2.expr2) dealloc_arg (&(my_node->arg2.expr2));
- if (my_node->arg2.next) dealloc_arg (&(my_node->arg2.next));
-
- if (my_node->arg1.argexpr) free(my_node->arg1.argexpr);
- if (my_node->arg2.argexpr) free(my_node->arg2.argexpr);
- if (my_node->fname) free(my_node->fname);
-
- free(my_node);
- *node = NULL;
-}
-
-static void dealloc_macro (CS_MACRO **macro)
-{
- CS_MACRO *my_macro;
-
- if (*macro == NULL) return;
- my_macro = *macro;
- if (my_macro->name) free (my_macro->name);
- if (my_macro->args) dealloc_arg (&(my_macro->args));
- if (my_macro->next) dealloc_macro (&(my_macro->next));
- free (my_macro);
- *macro = NULL;
-}
-
-static void dealloc_function (CS_FUNCTION **csf)
-{
- CS_FUNCTION *my_csf;
-
- if (*csf == NULL) return;
- my_csf = *csf;
- if (my_csf->name) free (my_csf->name);
- if (my_csf->next) dealloc_function (&(my_csf->next));
- free (my_csf);
- *csf = NULL;
-}
-
-static int find_open_delim (CSPARSE *parse, char *buf, int x, int len)
-{
- char *p;
- int ws_index = 2+parse->taglen;
-
- while (x < len)
- {
- p = strchr (&(buf[x]), '<');
- if (p == NULL) return -1;
- if (p[1] == '?' && !strncasecmp(&p[2], parse->tag, parse->taglen) &&
- (p[ws_index] == ' ' || p[ws_index] == '\n' || p[ws_index] == '\t' || p[ws_index] == '\r'))
- /*
- if (p[1] && p[1] == '?' &&
- p[2] && (p[2] == 'C' || p[2] == 'c') &&
- p[3] && (p[3] == 'S' || p[3] == 's') &&
- p[4] && (p[4] == ' ' || p[4] == '\n' || p[4] == '\t' || p[4] == '\r'))
- */
- {
- return p - buf;
- }
- x = p - buf + 1;
- }
- return -1;
-}
-
-static NEOERR *_store_error (CSPARSE *parse, NEOERR *err)
-{
- CS_ERROR *ptr;
- CS_ERROR *node;
-
- node = (CS_ERROR *) calloc(1, sizeof(CS_ERROR));
- if (node == NULL)
- {
- return nerr_raise (NERR_NOMEM,
- "Unable to allocate memory for error entry");
- }
-
- node->err = err;
-
- if (parse->err_list == NULL)
- {
- parse->err_list = node;
- return STATUS_OK;
- }
-
- ptr = parse->err_list;
- while (ptr->next != NULL)
- ptr = ptr->next;
-
- ptr->next = node;
- return STATUS_OK;
-
-}
-
-NEOERR *cs_parse_file (CSPARSE *parse, const char *path)
-{
- NEOERR *err;
- char *ibuf;
- const char *save_context;
- int save_infile;
- char fpath[_POSIX_PATH_MAX];
- CS_POSITION pos;
-
- if (path == NULL)
- return nerr_raise (NERR_ASSERT, "path is NULL");
-
- if (parse->fileload)
- {
- err = parse->fileload(parse->fileload_ctx, parse->hdf, path, &ibuf);
- }
- else
- {
- if (path[0] != '/')
- {
- err = hdf_search_path (parse->hdf, path, fpath);
- if (parse->global_hdf && nerr_handle(&err, NERR_NOT_FOUND))
- err = hdf_search_path(parse->global_hdf, path, fpath);
- if (err != STATUS_OK) return nerr_pass(err);
- path = fpath;
- }
-
- err = ne_load_file (path, &ibuf);
- }
- if (err) return nerr_pass (err);
-
- save_context = parse->context;
- parse->context = path;
- save_infile = parse->in_file;
- parse->in_file = 1;
-
- if (parse->audit_mode) {
- /* Save previous position before parsing the new file */
- memcpy(&pos, &parse->pos, sizeof(CS_POSITION));
-
- parse->pos.line = 0;
- parse->pos.col = 0;
- parse->pos.cur_offset = 0;
- }
-
- err = cs_parse_string(parse, ibuf, strlen(ibuf));
-
- if (parse->audit_mode) {
- memcpy(&parse->pos, &pos, sizeof(CS_POSITION));
- }
-
- parse->in_file = save_infile;
- parse->context = save_context;
-
- return nerr_pass(err);
-}
-
-static char *find_context (CSPARSE *parse, int offset, char *buf, size_t blen)
-{
- FILE *fp;
- int dump_err = 1;
- char line[256];
- int count = 0;
- int lineno = 0;
- char *data;
-
- if (offset == -1) offset = parse->offset;
-
- do
- {
- if (parse->in_file && parse->context)
- {
- /* Open the file and find which line we're on */
-
- fp = fopen(parse->context, "r");
- if (fp == NULL) {
- ne_warn("Unable to open context %s", parse->context);
- break;
- }
- while (fgets(line, sizeof(line), fp) != NULL)
- {
- count += strlen(line);
- if (strchr(line, '\n') != NULL)
- lineno++;
- if (count > offset) break;
- }
- fclose (fp);
- snprintf (buf, blen, "[%s:%d]", parse->context, lineno);
- }
- else
- {
- data = parse->context_string;
- if (data != NULL)
- {
- lineno = 1;
- while (count < offset)
- {
- if (data[count++] == '\n') lineno++;
- }
- if (parse->context)
- snprintf (buf, blen, "[%s:~%d]", parse->context, lineno);
- else
- snprintf (buf, blen, "[lineno:~%d]", lineno);
- }
- else
- {
- if (parse->context)
- snprintf (buf, blen, "[%s:%d]", parse->context, offset);
- else
- snprintf (buf, blen, "[offset:%d]", offset);
- }
- }
- dump_err = 0;
- } while (0);
- if (dump_err)
- {
- if (parse->context)
- snprintf (buf, blen, "[-E- %s:%d]", parse->context, offset);
- else
- snprintf (buf, blen, "[-E- offset:%d]", offset);
- }
-
- return buf;
-}
-
-static char *expand_state (CS_STATE state)
-{
- static char buf[256];
-
- if (state & ST_GLOBAL)
- return "GLOBAL";
- else if (state & ST_IF)
- return "IF";
- else if (state & ST_ELSE)
- return "ELSE";
- else if (state & ST_EACH)
- return "EACH";
- else if (state & ST_WITH)
- return "WITH";
- else if (state & ST_DEF)
- return "DEF";
- else if (state & ST_LOOP)
- return "LOOP";
- else if (state & ST_ALT)
- return "ALT";
- else if (state & ST_ESCAPE)
- return "ESCAPE";
-
- snprintf(buf, sizeof(buf), "Unknown state %d", state);
- return buf;
-}
-
-NEOERR *cs_parse_string (CSPARSE *parse, char *ibuf, size_t ibuf_len)
-{
- NEOERR *err = STATUS_OK;
- STACK_ENTRY *entry, *current_entry;
- char *p;
- char *token;
- int done = 0;
- int i, n;
- char *arg;
- int initial_stack_depth;
- int initial_offset;
- char *initial_context;
- char tmp[256];
-
- err = uListAppend(parse->alloc, ibuf);
- if (err)
- {
- free (ibuf);
- return nerr_pass (err);
- }
-
- initial_stack_depth = uListLength(parse->stack);
- initial_offset = parse->offset;
- initial_context = parse->context_string;
-
- parse->offset = 0;
- parse->context_string = ibuf;
- while (!done)
- {
- /* Stage 1: Find <?cs starter */
- i = find_open_delim (parse, ibuf, parse->offset, ibuf_len);
- if (i >= 0)
- {
- ibuf[i] = '\0';
- /* Create literal with data up until start delim */
- /* ne_warn ("literal -> %d-%d", parse->offset, i); */
- err = (*(Commands[0].parse_handler))(parse, 0, &(ibuf[parse->offset]));
- /* skip delim */
- token = &(ibuf[i+3+parse->taglen]);
- while (*token && isspace(*token)) token++;
-
- p = strstr (token, "?>");
- if (p == NULL)
- {
- return nerr_raise (NERR_PARSE, "%s Missing end ?> at %s",
- find_context(parse, i, tmp, sizeof(tmp)), &(ibuf[parse->offset]));
- }
- *p = '\0';
- if (strstr (token, "<?") != NULL)
- {
- return nerr_raise (NERR_PARSE, "%s Missing end ?> at %s",
- find_context(parse, i, tmp, sizeof(tmp)),
- token);
- }
- parse->offset = p - ibuf + 2;
- if (token[0] != '#') /* handle comments */
- {
- for (i = 1; Commands[i].cmd; i++)
- {
- n = Commands[i].cmdlen;
- if (!strncasecmp(token, Commands[i].cmd, n))
- {
- if ((Commands[i].has_arg && ((token[n] == ':') || (token[n] == '!')))
- || (token[n] == ' ' || token[n] == '\0' || token[n] == '\r' || token[n] == '\n'))
- {
- err = uListGet (parse->stack, -1, (void *)&entry);
- if (err != STATUS_OK) goto cs_parse_done;
- if (!(Commands[i].allowed_state & entry->state))
- {
- return nerr_raise (NERR_PARSE,
- "%s Command %s not allowed in %s", Commands[i].cmd,
- find_context(parse, -1, tmp, sizeof(tmp)),
- expand_state(entry->state));
- }
- if (Commands[i].has_arg)
- {
- /* Need to parse out arg */
- arg = &token[n];
- err = (*(Commands[i].parse_handler))(parse, i, arg);
- }
- else
- {
- err = (*(Commands[i].parse_handler))(parse, i, NULL);
- }
- if (err != STATUS_OK) goto cs_parse_done;
- if (Commands[i].next_state & ST_POP)
- {
- void *ptr;
- err = uListPop(parse->stack, &ptr);
- if (err != STATUS_OK) goto cs_parse_done;
- entry = (STACK_ENTRY *)ptr;
- if (entry->next_tree)
- parse->current = entry->next_tree;
- else
- parse->current = entry->tree;
- free(entry);
- }
- if ((Commands[i].next_state & ~ST_POP) != ST_SAME)
- {
- entry = (STACK_ENTRY *) calloc (1, sizeof (STACK_ENTRY));
- if (entry == NULL)
- return nerr_raise (NERR_NOMEM,
- "%s Unable to allocate memory for stack entry",
- find_context(parse, -1, tmp, sizeof(tmp)));
- entry->state = Commands[i].next_state;
- entry->tree = parse->current;
- entry->location = parse->offset;
- /* Set the new stack escape context to the parent one */
- err = uListGet (parse->stack, -1, (void *)&current_entry);
- if (err != STATUS_OK) {
- free (entry);
- goto cs_parse_done;
- }
- entry->escape = current_entry->escape;
- /* Get the future escape context from parse because when
- * we parse "escape", the new stack has not yet been established.
- */
- entry->escape = parse->escaping.next_stack;
- parse->escaping.next_stack = parse->escaping.global_ctx;
- err = uListAppend(parse->stack, entry);
- if (err != STATUS_OK) {
- free (entry);
- goto cs_parse_done;
- }
- }
- break;
- }
- }
- }
- if (Commands[i].cmd == NULL)
- {
- return nerr_raise (NERR_PARSE, "%s Unknown command %s",
- find_context(parse, -1, tmp, sizeof(tmp)), token);
- }
- }
- }
- else
- {
- /* Create literal with all remaining data */
- err = (*(Commands[0].parse_handler))(parse, 0, &(ibuf[parse->offset]));
- done = 1;
- }
- }
- /* Should we check the parse stack here? */
- while (uListLength(parse->stack) > initial_stack_depth)
- {
- err = uListPop(parse->stack, (void *)&entry);
- if (err != STATUS_OK) goto cs_parse_done;
- if (entry->state & ~(ST_GLOBAL | ST_POP))
- return nerr_raise (NERR_PARSE, "%s Non-terminted %s clause",
- find_context(parse, entry->location, tmp, sizeof(tmp)),
- expand_state(entry->state));
- }
-
-cs_parse_done:
- parse->offset = initial_offset;
- parse->context_string = initial_context;
- parse->escaping.current = NEOS_ESCAPE_NONE;
- return nerr_pass(err);
-}
-
-static CS_LOCAL_MAP * lookup_map (CSPARSE *parse, char *name, char **rest)
-{
- CS_LOCAL_MAP *map;
- char *c;
-
- /* This shouldn't happen, but it did once... */
- if (name == NULL) return NULL;
- map = parse->locals;
- c = strchr (name, '.');
- if (c != NULL) *c = '\0';
- *rest = c;
- while (map != NULL)
- {
- if (!strcmp (map->name, name))
- {
- if (c != NULL) *c = '.';
- return map;
- }
- map = map->next;
- }
- if (c != NULL) *c = '.';
- return NULL;
-}
-
-static HDF *var_lookup_obj (CSPARSE *parse, char *name)
-{
- CS_LOCAL_MAP *map;
- char *c;
- HDF *ret_hdf;
-
- map = lookup_map (parse, name, &c);
- if (map && map->type == CS_TYPE_VAR)
- {
- if (c == NULL)
- {
- return map->h;
- }
- else
- {
- return hdf_get_obj (map->h, c+1);
- }
- }
- /* smarti: Added support for global hdf under local hdf */
- /* return hdf_get_obj (parse->hdf, name); */
- ret_hdf = hdf_get_obj (parse->hdf, name);
- if (ret_hdf == NULL && parse->global_hdf != NULL) {
- ret_hdf = hdf_get_obj (parse->global_hdf, name);
- }
- return ret_hdf;
-}
-
-/* Ugh, I have to write the same walking code because I can't grab the
- * object for writing, as it might not exist... */
-static NEOERR *var_set_value (CSPARSE *parse, char *name, char *value)
-{
- CS_LOCAL_MAP *map;
- char *c;
-
- map = parse->locals;
- c = strchr (name, '.');
- if (c != NULL) *c = '\0';
- while (map != NULL)
- {
- if (!strcmp (map->name, name))
- {
- if (map->type == CS_TYPE_VAR)
- {
- if (c == NULL)
- {
- if (map->h == NULL) /* node didn't exist yet */
- return nerr_pass (hdf_set_value (parse->hdf, map->s, value));
- else
- return nerr_pass (hdf_set_value (map->h, NULL, value));
- }
- else
- {
- *c = '.';
- if (map->h == NULL) /* node didn't exist yet */
- {
- NEOERR *err;
- char *mapped_name = sprintf_alloc("%s%s", map->s, c);
- if (mapped_name == NULL)
- return nerr_raise(NERR_NOMEM, "Unable to allocate memory to create mapped name");
- err = hdf_set_value(parse->hdf, mapped_name, value);
- free(mapped_name);
- return nerr_pass(err);
- }
- return nerr_pass (hdf_set_value (map->h, c+1, value));
- }
- }
- else
- {
- if (c == NULL)
- {
- char *tmp = NULL;
- /* If this is a string, it might be what we're setting,
- * ie <?cs set:value = value ?>
- */
- if (map->type == CS_TYPE_STRING && map->map_alloc)
- tmp = map->s;
- map->type = CS_TYPE_STRING;
- map->map_alloc = 1;
- map->s = strdup(value);
- if (tmp != NULL) free(tmp);
- if (map->s == NULL && value != NULL)
- return nerr_raise(NERR_NOMEM,
- "Unable to allocate memory to set var");
-
- return STATUS_OK;
- }
- else {
- ne_warn("WARNING!! Trying to set sub element '%s' of local variable '%s' which doesn't map to an HDF variable, ignoring", c+1, map->name);
- return STATUS_OK;
- }
- }
- }
- map = map->next;
- }
- if (c != NULL) *c = '.';
- return nerr_pass (hdf_set_value (parse->hdf, name, value));
-}
-
-static char *var_lookup (CSPARSE *parse, char *name)
-{
- CS_LOCAL_MAP *map;
- char *c;
- char* retval;
-
- map = lookup_map (parse, name, &c);
- if (map)
- {
- if (map->type == CS_TYPE_VAR)
- {
- if (c == NULL)
- {
- return hdf_obj_value (map->h);
- }
- else
- {
- return hdf_get_value (map->h, c+1, NULL);
- }
- }
- /* Hmm, if c != NULL, they are asking for a sub member of something
- * which isn't a var... right now we ignore them, I don't know what
- * the right thing is */
- /* hmm, its possible now that they are getting a reference to a
- * string that will be deleted... where is it used? */
- else if (map->type == CS_TYPE_STRING)
- {
- return map->s;
- }
- else if (map->type == CS_TYPE_NUM)
- {
- char buf[40];
- if (map->s) return map->s;
- snprintf (buf, sizeof(buf), "%ld", map->n);
- map->s = strdup(buf);
- map->map_alloc = 1;
- return map->s;
- }
- }
- /* smarti: Added support for global hdf under local hdf */
- /* return hdf_get_value (parse->hdf, name, NULL); */
- retval = hdf_get_value (parse->hdf, name, NULL);
- if (retval == NULL && parse->global_hdf != NULL) {
- retval = hdf_get_value (parse->global_hdf, name, NULL);
- }
- return retval;
-}
-
-long int var_int_lookup (CSPARSE *parse, char *name)
-{
- char *vs;
-
- vs = var_lookup (parse, name);
-
- if (vs == NULL)
- return 0;
- else
- return atoi(vs);
-}
-
-typedef struct _token
-{
- CSTOKEN_TYPE type;
- char *value;
- size_t len;
-} CSTOKEN;
-
-struct _simple_tokens
-{
- BOOL two_chars;
- char *token;
- CSTOKEN_TYPE type;
-} SimpleTokens[] = {
- { TRUE, "<=", CS_OP_LTE },
- { TRUE, ">=", CS_OP_GTE },
- { TRUE, "==", CS_OP_EQUAL },
- { TRUE, "!=", CS_OP_NEQUAL },
- { TRUE, "||", CS_OP_OR },
- { TRUE, "&&", CS_OP_AND },
- { FALSE, "!", CS_OP_NOT },
-/* For now, we are still treating this special instead of as an op
- * If we make this an op, then we'd have to determine how to handle
- * NUM types without doing something like #"5" */
-/* { FALSE, "#", CS_OP_NUM }, */
- { FALSE, "?", CS_OP_EXISTS },
- { FALSE, "<", CS_OP_LT },
- { FALSE, ">", CS_OP_GT },
- { FALSE, "+", CS_OP_ADD },
- { FALSE, "-", CS_OP_SUB },
- { FALSE, "*", CS_OP_MULT },
- { FALSE, "/", CS_OP_DIV },
- { FALSE, "%", CS_OP_MOD },
- { FALSE, "(", CS_OP_LPAREN },
- { FALSE, ")", CS_OP_RPAREN },
- { FALSE, "[", CS_OP_LBRACKET },
- { FALSE, "]", CS_OP_RBRACKET },
- { FALSE, ".", CS_OP_DOT },
- { FALSE, ",", CS_OP_COMMA },
- { FALSE, NULL, 0 }
-};
-
-#define MAX_TOKENS 256
-
-static NEOERR *parse_tokens (CSPARSE *parse, char *arg, CSTOKEN *tokens,
- int *used_tokens)
-{
- char tmp[256];
- int ntokens = 0;
- int x;
- BOOL found;
- BOOL last_is_op = 1;
- char *p, *p2;
- char *expr = arg;
-
- while (arg && *arg != '\0')
- {
- while (*arg && isspace(*arg)) arg++;
- if (*arg == '\0') break;
- x = 0;
- found = FALSE;
-
- /* If we already saw an operator, and this is a +/-, assume its
- * a number */
- if (!(last_is_op && (*arg == '+' || *arg == '-')))
- {
- while ((found == FALSE) && SimpleTokens[x].token)
- {
- if (((SimpleTokens[x].two_chars == TRUE) &&
- (*arg == SimpleTokens[x].token[0]) &&
- (*(arg + 1) == SimpleTokens[x].token[1])) ||
- ((SimpleTokens[x].two_chars == FALSE) &&
- (*arg == SimpleTokens[x].token[0])))
- {
- tokens[ntokens++].type = SimpleTokens[x].type;
- found = TRUE;
- arg++;
- if (SimpleTokens[x].two_chars) arg++;
- }
- x++;
- }
- /* Another special case: RPAREN and RBRACKET can have another op
- * after it */
- if (found && !(tokens[ntokens-1].type == CS_OP_RPAREN || tokens[ntokens-1].type == CS_OP_RBRACKET))
- last_is_op = 1;
- }
-
- if (found == FALSE)
- {
- if (*arg == '#')
- {
- /* TODO: make # an operator and not syntax */
- arg++;
- tokens[ntokens].type = CS_TYPE_NUM;
- tokens[ntokens].value = arg;
- strtol(arg, &p, 0);
- if (p == arg)
- {
- tokens[ntokens].type = CS_TYPE_VAR_NUM;
- p = strpbrk(arg, "\"?<>=!#-+|&,)*/%[]( \t\r\n");
- if (p == arg)
- return nerr_raise (NERR_PARSE, "%s Missing varname/number after #: %s",
- find_context(parse, -1, tmp, sizeof(tmp)), arg);
- }
- if (p == NULL)
- tokens[ntokens].len = strlen(arg);
- else
- tokens[ntokens].len = p - arg;
- ntokens++;
- arg = p;
- }
- else if (*arg == '"')
- {
- arg++;
- tokens[ntokens].type = CS_TYPE_STRING;
- tokens[ntokens].value = arg;
- p = strchr (arg, '"');
- if (p == NULL)
- return nerr_raise (NERR_PARSE, "%s Missing end of string: %s",
- find_context(parse, -1, tmp, sizeof(tmp)), arg);
- tokens[ntokens].len = p - arg;
- ntokens++;
- arg = p + 1;
- }
- else if (*arg == '\'')
- {
- arg++;
- tokens[ntokens].type = CS_TYPE_STRING;
- tokens[ntokens].value = arg;
- p = strchr (arg, '\'');
- if (p == NULL)
- return nerr_raise (NERR_PARSE, "%s Missing end of string: %s",
- find_context(parse, -1, tmp, sizeof(tmp)), arg);
- tokens[ntokens].len = p - arg;
- ntokens++;
- arg = p + 1;
- }
- else if (*arg == '$')
- {
- /* TODO: make $ an operator and not syntax */
- arg++;
- tokens[ntokens].type = CS_TYPE_VAR;
- tokens[ntokens].value = arg;
- p = strpbrk(arg, "\"?<>=!#-+|&,)*/%[]( \t\r\n");
- if (p == arg)
- return nerr_raise (NERR_PARSE, "%s Missing varname after $: %s",
- find_context(parse, -1, tmp, sizeof(tmp)), arg);
- if (p == NULL)
- tokens[ntokens].len = strlen(arg);
- else
- tokens[ntokens].len = p - arg;
- ntokens++;
- arg = p;
- }
- else
- {
- tokens[ntokens].type = CS_TYPE_VAR;
- tokens[ntokens].value = arg;
- /* Special case for Dave: If this is entirely a number, treat it
- * as one */
- strtol(arg, &p2, 0);
- p = strpbrk(arg, "\"?<>=!#-+|&,)*/%[]( \t\r\n");
- /* This is complicated because +/- is valid in a number, but not
- * in a varname */
- if (p2 != arg && (p <= p2 || (p == NULL && *p2 == '\0')))
- {
- tokens[ntokens].type = CS_TYPE_NUM;
- tokens[ntokens].len = p2 - arg;
- arg = p2;
- }
- else
- {
- if (p == arg)
- return nerr_raise (NERR_PARSE,
- "%s Var arg specified with no varname: %s",
- find_context(parse, -1, tmp, sizeof(tmp)), arg);
- if (p == NULL)
- tokens[ntokens].len = strlen(arg);
- else
- tokens[ntokens].len = p - arg;
- arg = p;
- }
- ntokens++;
- }
- last_is_op = 0;
- }
- if (ntokens >= MAX_TOKENS)
- return nerr_raise (NERR_PARSE,
- "%s Expression exceeds maximum number of tokens of %d: %s",
- find_context(parse, -1, tmp, sizeof(tmp)), MAX_TOKENS, expr);
- }
- *used_tokens = ntokens;
- return STATUS_OK;
-}
-
-CSTOKEN_TYPE OperatorOrder[] = {
- CS_OP_COMMA,
- CS_OP_OR,
- CS_OP_AND,
- CS_OP_EQUAL | CS_OP_NEQUAL,
- CS_OP_GT | CS_OP_GTE | CS_OP_LT | CS_OP_LTE,
- CS_OP_ADD | CS_OP_SUB,
- CS_OP_MULT | CS_OP_DIV | CS_OP_MOD,
- CS_OP_NOT | CS_OP_EXISTS,
- CS_OP_LBRACKET | CS_OP_DOT | CS_OP_LPAREN,
- 0
-};
-
-static char *expand_token_type(CSTOKEN_TYPE t_type, int more)
-{
- switch (t_type)
- {
- case CS_OP_EXISTS: return "?";
- case CS_OP_NOT: return "!";
- case CS_OP_NUM: return "#";
- case CS_OP_EQUAL: return "==";
- case CS_OP_NEQUAL: return "!=";
- case CS_OP_LT: return "<";
- case CS_OP_LTE: return "<=";
- case CS_OP_GT: return ">";
- case CS_OP_GTE: return ">=";
- case CS_OP_AND: return "&&";
- case CS_OP_OR: return "||";
- case CS_OP_ADD: return "+";
- case CS_OP_SUB: return "-";
- case CS_OP_MULT: return "*";
- case CS_OP_DIV: return "/";
- case CS_OP_MOD: return "%";
- case CS_OP_LPAREN: return "(";
- case CS_OP_RPAREN: return ")";
- case CS_OP_LBRACKET: return "[";
- case CS_OP_RBRACKET: return "]";
- case CS_OP_DOT : return ".";
- case CS_OP_COMMA : return ",";
- case CS_TYPE_STRING: return more ? "STRING" : "s";
- case CS_TYPE_NUM: return more ? "NUM" : "n";
- case CS_TYPE_VAR: return more ? "VAR" : "v";
- case CS_TYPE_VAR_NUM: return more ? "VARNUM" : "vn";
- case CS_TYPE_MACRO: return more ? "MACRO" : "m";
- case CS_TYPE_FUNCTION: return more ? "FUNC" : "f";
- default: return "u";
- }
- return "u";
-}
-
-static char *token_list (CSTOKEN *tokens, int ntokens, char *buf, size_t buflen)
-{
- char *p = buf;
- int i, t;
- char save;
-
- for (i = 0; i < ntokens && buflen > 0; i++)
- {
- if (tokens[i].value)
- {
- save = tokens[i].value[tokens[i].len];
- tokens[i].value[tokens[i].len] = '\0';
- t = snprintf(p, buflen, "%s%d:%s:'%s'", i ? " ":"", i, expand_token_type(tokens[i].type, 0), tokens[i].value);
- tokens[i].value[tokens[i].len] = save;
- }
- else
- {
- t = snprintf(p, buflen, "%s%d:%s", i ? " ":"", i, expand_token_type(tokens[i].type, 0));
- }
- if (t == -1 || t >= buflen) return buf;
- buflen -= t;
- p += t;
- }
- return buf;
-}
-
-static NEOERR *parse_expr2 (CSPARSE *parse, CSTOKEN *tokens, int ntokens, int lvalue, CSARG *arg)
-{
- NEOERR *err = STATUS_OK;
- char tmp[256];
- char tmp2[256];
- int x, op;
- int m;
-
-#if DEBUG_EXPR_PARSE
- fprintf(stderr, "%s\n", token_list(tokens, ntokens, tmp, sizeof(tmp)));
- for (x = 0; x < ntokens; x++)
- {
- fprintf (stderr, "%s ", expand_token_type(tokens[x].type, 0));
- }
- fprintf(stderr, "\n");
-#endif
-
- /* Not quite sure what to do with this case... */
- if (ntokens == 0)
- {
- return nerr_raise (NERR_PARSE, "%s Bad Expression",
- find_context(parse, -1, tmp, sizeof(tmp)));
- }
- if (ntokens == 1)
- {
- x = 0;
- if (tokens[0].type & CS_TYPES)
- {
- arg->s = tokens[0].value;
- if (tokens[0].len >= 0)
- arg->s[tokens[0].len] = '\0';
- arg->op_type = tokens[0].type;
-
- if (tokens[x].type == CS_TYPE_NUM)
- arg->n = strtol(arg->s, NULL, 0);
- return STATUS_OK;
- }
- else
- {
- return nerr_raise (NERR_PARSE,
- "%s Terminal token is not an argument, type is %s",
- find_context(parse, -1, tmp, sizeof(tmp)), expand_token_type(tokens[0].type, 0));
- }
- }
-
- /*
- if (ntokens == 2 && (tokens[0].type & CS_OPS_UNARY))
- {
- arg->op_type = tokens[0].type;
- arg->expr1 = (CSARG *) calloc (1, sizeof (CSARG));
- if (arg->expr1 == NULL)
- return nerr_raise (NERR_NOMEM,
- "%s Unable to allocate memory for expression",
- find_context(parse, -1, tmp, sizeof(tmp)));
- err = parse_expr2(parse, tokens + 1, 1, lvalue, arg->expr1);
- return nerr_pass(err);
- }
- */
-
- op = 0;
- while (OperatorOrder[op])
- {
- x = ntokens-1;
- while (x >= 0)
- {
- /* handle associative ops by skipping through the entire set here,
- * ie the whole thing is an expression that can't match a binary op */
- if (tokens[x].type & CS_OP_RPAREN)
- {
- m = 1;
- x--;
- while (x >= 0)
- {
- if (tokens[x].type & CS_OP_RPAREN) m++;
- if (tokens[x].type & CS_OP_LPAREN) m--;
- if (m == 0) break;
- x--;
- }
- if (m)
- return nerr_raise (NERR_PARSE,
- "%s Missing left parenthesis in expression",
- find_context(parse, -1, tmp, sizeof(tmp)));
- /* if (x == 0) break; */
- /* x--; */
- /* we don't do an x-- here, because we are special casing the
- * left bracket to be both an operator and an associative */
- }
- if (tokens[x].type & CS_OP_RBRACKET)
- {
- m = 1;
- x--;
- while (x >= 0)
- {
- if (tokens[x].type & CS_OP_RBRACKET) m++;
- if (tokens[x].type & CS_OP_LBRACKET) m--;
- if (m == 0) break;
- x--;
- }
- if (m)
- return nerr_raise (NERR_PARSE,
- "%s Missing left bracket in expression",
- find_context(parse, -1, tmp, sizeof(tmp)));
- if (x == 0) break;
- /* we don't do an x-- here, because we are special casing the
- * left bracket to be both an operator and an associative */
- }
- if (lvalue && !(tokens[x].type & CS_OPS_LVALUE))
- {
- return nerr_raise (NERR_PARSE,
- "%s Invalid op '%s' in lvalue",
- find_context(parse, -1, tmp, sizeof(tmp)),
- expand_token_type(tokens[x].type, 0));
- }
- if (tokens[x].type & OperatorOrder[op])
- {
- if (tokens[x].type & CS_OPS_UNARY)
- {
- if (x == 0)
- {
- arg->op_type = tokens[x].type;
- arg->expr1 = (CSARG *) calloc (1, sizeof (CSARG));
- if (arg->expr1 == NULL)
- return nerr_raise (NERR_NOMEM,
- "%s Unable to allocate memory for expression",
- find_context(parse, -1, tmp, sizeof(tmp)));
- if (tokens[x].type & CS_OP_LPAREN)
- {
- if (!(tokens[ntokens-1].type & CS_OP_RPAREN))
- {
- return nerr_raise (NERR_PARSE,
- "%s Missing right parenthesis in expression",
- find_context(parse, -1, tmp, sizeof(tmp)));
- }
- /* XXX: we might want to set lvalue to 0 here */
- /* -2 since we strip the RPAREN as well */
- err = parse_expr2(parse, tokens + 1, ntokens-2, lvalue, arg->expr1);
- }
- else
- {
- err = parse_expr2(parse, tokens + 1, ntokens-1, lvalue, arg->expr1);
- }
- return nerr_pass(err);
- }
- }
- else if (tokens[x].type == CS_OP_COMMA)
- {
- /* Technically, comma should be a left to right, not right to
- * left, so we're going to build up the arguments in reverse
- * order... */
- arg->op_type = tokens[x].type;
- /* The actual argument is expr1 */
- arg->expr1 = (CSARG *) calloc (1, sizeof (CSARG));
- /* The previous argument is next */
- arg->next = (CSARG *) calloc (1, sizeof (CSARG));
- if (arg->expr1 == NULL || arg->next == NULL)
- return nerr_raise (NERR_NOMEM,
- "%s Unable to allocate memory for expression",
- find_context(parse, -1, tmp, sizeof(tmp)));
- err = parse_expr2(parse, tokens + x + 1, ntokens-x-1, lvalue, arg->expr1);
- if (err) return nerr_pass (err);
- err = parse_expr2(parse, tokens, x, lvalue, arg->next);
- if (err) return nerr_pass (err);
- return STATUS_OK;
- }
- else
- {
- arg->op_type = tokens[x].type;
- arg->expr2 = (CSARG *) calloc (1, sizeof (CSARG));
- arg->expr1 = (CSARG *) calloc (1, sizeof (CSARG));
- if (arg->expr1 == NULL || arg->expr2 == NULL)
- return nerr_raise (NERR_NOMEM,
- "%s Unable to allocate memory for expression",
- find_context(parse, -1, tmp, sizeof(tmp)));
- if (tokens[x].type & CS_OP_LBRACKET)
- {
- if (!(tokens[ntokens-1].type & CS_OP_RBRACKET))
- {
- return nerr_raise (NERR_PARSE,
- "%s Missing right bracket in expression",
- find_context(parse, -1, tmp, sizeof(tmp)));
- }
- /* Inside of brackets, we don't limit to valid lvalue ops */
- /* -2 since we strip the RBRACKET as well */
- err = parse_expr2(parse, tokens + x + 1, ntokens-x-2, 0, arg->expr2);
- }
- else
- {
- err = parse_expr2(parse, tokens + x + 1, ntokens-x-1, lvalue, arg->expr2);
- }
- if (err) return nerr_pass (err);
- err = parse_expr2(parse, tokens, x, lvalue, arg->expr1);
- if (err) return nerr_pass (err);
- return STATUS_OK;
- }
- }
- x--;
- }
- op++;
- }
-
- /* Unary op against an entire expression */
- if ((tokens[0].type & CS_OPS_UNARY) && tokens[1].type == CS_OP_LPAREN &&
- tokens[ntokens-1].type == CS_OP_RPAREN)
- {
- arg->op_type = tokens[0].type;
- arg->expr1 = (CSARG *) calloc (1, sizeof (CSARG));
- if (arg->expr1 == NULL)
- return nerr_raise (NERR_NOMEM,
- "%s Unable to allocate memory for expression",
- find_context(parse, -1, tmp, sizeof(tmp)));
- err = parse_expr2(parse, tokens + 2, ntokens-3, lvalue, arg->expr1);
- return nerr_pass(err);
- }
- if (tokens[0].type & CS_OPS_UNARY)
- {
- arg->op_type = tokens[0].type;
- arg->expr1 = (CSARG *) calloc (1, sizeof (CSARG));
- if (arg->expr1 == NULL)
- return nerr_raise (NERR_NOMEM,
- "%s Unable to allocate memory for expression",
- find_context(parse, -1, tmp, sizeof(tmp)));
- err = parse_expr2(parse, tokens + 1, ntokens-1, lvalue, arg->expr1);
- return nerr_pass(err);
- }
-
- /* function call */
- if ((tokens[0].type & CS_TYPE_VAR) && tokens[1].type == CS_OP_LPAREN &&
- tokens[ntokens-1].type == CS_OP_RPAREN)
- {
- CS_FUNCTION *csf;
- int nargs;
-
- if (tokens[0].len >= 0)
- tokens[0].value[tokens[0].len] = '\0';
-
- arg->op_type = CS_TYPE_FUNCTION;
- csf = parse->functions;
- while (csf != NULL)
- {
- if (!strcmp(tokens[0].value, csf->name))
- {
- arg->function = csf;
- break;
- }
- csf = csf->next;
- }
- if (csf == NULL)
- {
- return nerr_raise (NERR_PARSE, "%s Unknown function %s called",
- find_context(parse, -1, tmp, sizeof(tmp)), tokens[0].value);
- }
- arg->expr1 = (CSARG *) calloc (1, sizeof (CSARG));
- if (arg->expr1 == NULL)
- return nerr_raise (NERR_NOMEM,
- "%s Unable to allocate memory for expression",
- find_context(parse, -1, tmp, sizeof(tmp)));
- if (ntokens-3 > 0) {
- err = parse_expr2(parse, tokens + 2, ntokens-3, lvalue, arg->expr1);
- if (err) return nerr_pass(err);
- } else {
- free(arg->expr1);
- arg->expr1 = NULL;
- }
- nargs = rearrange_for_call(&(arg->expr1));
- if (nargs != arg->function->n_args)
- {
- return nerr_raise (NERR_PARSE,
- "%s Incorrect number of arguments in call to %s, expected %d, got %d",
- find_context(parse, -1, tmp, sizeof(tmp)), tokens[0].value,
- arg->function->n_args, nargs);
- }
- return nerr_pass(err);
- }
-
- return nerr_raise (NERR_PARSE, "%s Bad Expression:%s",
- find_context(parse, -1, tmp, sizeof(tmp)),
- token_list(tokens, ntokens, tmp2, sizeof(tmp2)));
-}
-
-static NEOERR *parse_expr (CSPARSE *parse, char *arg, int lvalue, CSARG *expr)
-{
- NEOERR *err;
- CSTOKEN tokens[MAX_TOKENS];
- int ntokens = 0;
-
- memset(tokens, 0, sizeof(CSTOKEN) * MAX_TOKENS);
- err = parse_tokens (parse, arg, tokens, &ntokens);
- if (err) return nerr_pass(err);
-
- if (parse->audit_mode) {
- /* Save the complete expression string for future reference */
- expr->argexpr = strdup(arg);
- }
-
- err = parse_expr2 (parse, tokens, ntokens, lvalue, expr);
- if (err) return nerr_pass(err);
- return STATUS_OK;
-}
-
-static NEOERR *literal_parse (CSPARSE *parse, int cmd, char *arg)
-{
- NEOERR *err;
- CSTREE *node;
-
- /* ne_warn ("literal: %s", arg); */
- err = alloc_node (&node, parse);
- if (err) return nerr_pass(err);
- node->cmd = cmd;
- node->arg1.op_type = CS_TYPE_STRING;
- node->arg1.s = arg;
- *(parse->next) = node;
- parse->next = &(node->next);
- parse->current = node;
-
- return STATUS_OK;
-}
-
-static NEOERR *literal_eval (CSPARSE *parse, CSTREE *node, CSTREE **next)
-{
- NEOERR *err = STATUS_OK;
-
- if (node->arg1.s != NULL)
- err = parse->output_cb (parse->output_ctx, node->arg1.s);
- *next = node->next;
- return nerr_pass(err);
-}
-
-static NEOERR *name_parse (CSPARSE *parse, int cmd, char *arg)
-{
- NEOERR *err;
- CSTREE *node;
- char *a, *s;
- char tmp[256];
-
- /* ne_warn ("name: %s", arg); */
- err = alloc_node (&node, parse);
- if (err) return nerr_pass(err);
- node->cmd = cmd;
- if (arg[0] == '!')
- node->flags |= CSF_REQUIRED;
- arg++;
- /* Validate arg is a var (regex /^[#" ]$/) */
- a = neos_strip(arg);
- s = strpbrk(a, "#\" <>");
- if (s != NULL)
- {
- dealloc_node(&node);
- return nerr_raise (NERR_PARSE, "%s Invalid character in var name %s: %c",
- find_context(parse, -1, tmp, sizeof(tmp)),
- a, s[0]);
- }
-
- node->arg1.op_type = CS_TYPE_VAR;
- node->arg1.s = a;
- *(parse->next) = node;
- parse->next = &(node->next);
- parse->current = node;
-
- return STATUS_OK;
-}
-
-static NEOERR *escape_parse (CSPARSE *parse, int cmd, char *arg)
-{
- NEOERR *err;
- char *a = NULL;
- char tmp[256];
- CS_ESCAPE_MODES *esc_cursor;
- CSTREE *node;
-
- /* ne_warn ("escape: %s", arg); */
- err = alloc_node (&node, parse);
- if (err) return nerr_pass(err);
- node->cmd = cmd;
- /* Since this throws an error always if there's a problem
- * this flag seems pointless, but following convention,
- * here it is. */
- if (arg[0] == '!')
- node->flags |= CSF_REQUIRED;
- arg++; /* ignore colon, space, etc */
-
- /* Parse the arg - we're expecting a string */
- err = parse_expr (parse, arg, 0, &(node->arg1));
- if (err)
- {
- dealloc_node(&node);
- return nerr_pass(err);
- }
- if (node->arg1.op_type != CS_TYPE_STRING)
- {
- dealloc_node(&node);
- return nerr_raise (NERR_PARSE, "%s Invalid argument for escape: %s",
- find_context(parse, -1, tmp, sizeof(tmp)), arg);
- }
-
- a = neos_strip(node->arg1.s); /* Strip spaces for testing */
-
- /* Ensure the mode specified is allowed */
- for (esc_cursor = &EscapeModes[0];
- esc_cursor->mode != NULL;
- esc_cursor++)
- if (!strncasecmp(a, esc_cursor->mode, strlen(esc_cursor->mode)))
- {
- if (err != STATUS_OK) return nerr_pass(err);
- parse->escaping.next_stack = esc_cursor->context;
- break;
- }
- /* Didn't find an acceptable value we were looking for */
- if (esc_cursor->mode == NULL)
- {
- dealloc_node(&node);
- return nerr_raise (NERR_PARSE, "%s Invalid argument for escape: %s",
- find_context(parse, -1, tmp, sizeof(tmp)), a);
- }
-
- *(parse->next) = node;
- parse->next = &(node->case_0);
- parse->current = node;
- return STATUS_OK;
-}
-
-static NEOERR *name_eval (CSPARSE *parse, CSTREE *node, CSTREE **next)
-{
- NEOERR *err = STATUS_OK;
- HDF *obj;
- char *v;
-
- if (node->arg1.op_type == CS_TYPE_VAR && node->arg1.s != NULL)
- {
- obj = var_lookup_obj (parse, node->arg1.s);
- if (obj != NULL)
- {
- v = hdf_obj_name(obj);
- err = parse->output_cb (parse->output_ctx, v);
- }
- }
- *next = node->next;
- return nerr_pass(err);
-}
-
-static NEOERR *var_parse (CSPARSE *parse, int cmd, char *arg)
-{
- NEOERR *err;
- CSTREE *node;
- STACK_ENTRY *entry;
-
- err = uListGet (parse->stack, -1, (void *)&entry);
- if (err != STATUS_OK) return nerr_pass(err);
-
- /* ne_warn ("var: %s", arg); */
- err = alloc_node (&node, parse);
- if (err) return nerr_pass(err);
- node->cmd = cmd;
-
- /* Default escape the variable based on
- * current stack's escape context except for
- * uvar:
- */
- if (!strcmp(Commands[cmd].cmd, "uvar"))
- node->escape = NEOS_ESCAPE_NONE;
- else
- node->escape = entry->escape;
-
-
- if (arg[0] == '!')
- node->flags |= CSF_REQUIRED;
- arg++;
- /* Validate arg is a var (regex /^[#" ]$/) */
- err = parse_expr (parse, arg, 0, &(node->arg1));
- if (err)
- {
- dealloc_node(&node);
- return nerr_pass(err);
- }
-
- *(parse->next) = node;
- parse->next = &(node->next);
- parse->current = node;
-
- return STATUS_OK;
-}
-
-static NEOERR *lvar_parse (CSPARSE *parse, int cmd, char *arg)
-{
- NEOERR *err;
- CSTREE *node;
-
- /* ne_warn ("lvar: %s", arg); */
- err = alloc_node (&node, parse);
- if (err) return nerr_pass(err);
- node->cmd = cmd;
- if (arg[0] == '!')
- node->flags |= CSF_REQUIRED;
- arg++;
- /* Validate arg is a var (regex /^[#" ]$/) */
- err = parse_expr (parse, arg, 0, &(node->arg1));
- if (err)
- {
- dealloc_node(&node);
- return nerr_pass(err);
- }
-
- *(parse->next) = node;
- parse->next = &(node->next);
- parse->current = node;
-
- return STATUS_OK;
-}
-
-static NEOERR *linclude_parse (CSPARSE *parse, int cmd, char *arg)
-{
- NEOERR *err;
- CSTREE *node;
-
- /* ne_warn ("linclude: %s", arg); */
- err = alloc_node (&node, parse);
- if (err) return nerr_pass(err);
- node->cmd = cmd;
- if (arg[0] == '!')
- node->flags |= CSF_REQUIRED;
- arg++;
- /* Validate arg is a var (regex /^[#" ]$/) */
- err = parse_expr (parse, arg, 0, &(node->arg1));
- if (err)
- {
- dealloc_node(&node);
- return nerr_pass(err);
- }
-
- *(parse->next) = node;
- parse->next = &(node->next);
- parse->current = node;
-
- return STATUS_OK;
-}
-
-static NEOERR *alt_parse (CSPARSE *parse, int cmd, char *arg)
-{
- NEOERR *err;
- CSTREE *node;
-
- /* ne_warn ("var: %s", arg); */
- err = alloc_node (&node, parse);
- if (err) return nerr_pass(err);
- node->cmd = cmd;
- if (arg[0] == '!')
- node->flags |= CSF_REQUIRED;
- arg++;
- /* Validate arg is a var (regex /^[#" ]$/) */
- err = parse_expr (parse, arg, 0, &(node->arg1));
- if (err)
- {
- dealloc_node(&node);
- return nerr_pass(err);
- }
-
- *(parse->next) = node;
- parse->next = &(node->case_0);
- parse->current = node;
-
- return STATUS_OK;
-}
-
-static NEOERR *evar_parse (CSPARSE *parse, int cmd, char *arg)
-{
- NEOERR *err;
- CSTREE *node;
- char *a, *s;
- const char *save_context;
- int save_infile;
- char tmp[256];
-
- /* ne_warn ("evar: %s", arg); */
- err = alloc_node (&node, parse);
- if (err) return nerr_pass(err);
- node->cmd = cmd;
- if (arg[0] == '!')
- node->flags |= CSF_REQUIRED;
- arg++;
- /* Validate arg is a var (regex /^[#" ]$/) */
- a = neos_strip(arg);
- s = strpbrk(a, "#\" <>");
- if (s != NULL)
- {
- dealloc_node(&node);
- return nerr_raise (NERR_PARSE, "%s Invalid character in var name %s: %c",
- find_context(parse, -1, tmp, sizeof(tmp)),
- a, s[0]);
- }
-
- err = hdf_get_copy (parse->hdf, a, &s, NULL);
- if (err)
- {
- dealloc_node(&node);
- return nerr_pass (err);
- }
- if (node->flags & CSF_REQUIRED && s == NULL)
- {
- dealloc_node(&node);
- return nerr_raise (NERR_NOT_FOUND, "%s Unable to evar empty variable %s",
- find_context(parse, -1, tmp, sizeof(tmp)), a);
- }
-
- node->arg1.op_type = CS_TYPE_VAR;
- node->arg1.s = a;
- *(parse->next) = node;
- parse->next = &(node->next);
- parse->current = node;
-
- save_context = parse->context;
- save_infile = parse->in_file;
- parse->context = a;
- parse->in_file = 0;
- if (s) err = cs_parse_string (parse, s, strlen(s));
- parse->context = save_context;
- parse->in_file = save_infile;
-
- return nerr_pass (err);
-}
-
-static NEOERR *if_parse (CSPARSE *parse, int cmd, char *arg)
-{
- NEOERR *err;
- CSTREE *node;
-
- /* ne_warn ("if: %s", arg); */
- err = alloc_node (&node, parse);
- if (err != STATUS_OK) return nerr_pass(err);
- node->cmd = cmd;
- arg++;
-
- err = parse_expr (parse, arg, 0, &(node->arg1));
- if (err != STATUS_OK)
- {
- dealloc_node(&node);
- return nerr_pass(err);
- }
-
- *(parse->next) = node;
- parse->next = &(node->case_0);
- parse->current = node;
-
- return STATUS_OK;
-}
-
-char *arg_eval (CSPARSE *parse, CSARG *arg)
-{
- switch ((arg->op_type & CS_TYPES))
- {
- case CS_TYPE_STRING:
- return arg->s;
- case CS_TYPE_VAR:
- return var_lookup (parse, arg->s);
- case CS_TYPE_NUM:
- case CS_TYPE_VAR_NUM:
- default:
- ne_warn ("Unsupported type %s in arg_eval", expand_token_type(arg->op_type, 1));
- return NULL;
- }
-}
-
-/* This coerces everything to numbers */
-long int arg_eval_num (CSPARSE *parse, CSARG *arg)
-{
- long int v = 0;
-
- switch ((arg->op_type & CS_TYPES))
- {
- case CS_TYPE_STRING:
- v = strtol(arg->s, NULL, 0);
- break;
- case CS_TYPE_NUM:
- v = arg->n;
- break;
-
- case CS_TYPE_VAR:
- case CS_TYPE_VAR_NUM:
- v = var_int_lookup (parse, arg->s);
- break;
- default:
- ne_warn ("Unsupported type %s in arg_eval_num", expand_token_type(arg->op_type, 1));
- v = 0;
- break;
- }
- return v;
-}
-
-/* This is different from arg_eval_num because we don't force strings to
- * numbers, a string is either a number (if it is all numeric) or we're
- * testing existance. At least, that's what perl does and what dave
- * wants */
-long int arg_eval_bool (CSPARSE *parse, CSARG *arg)
-{
- long int v = 0;
- char *s, *r;
-
- switch ((arg->op_type & CS_TYPES))
- {
- case CS_TYPE_STRING:
- case CS_TYPE_VAR:
- if (arg->op_type == CS_TYPE_VAR)
- s = var_lookup(parse, arg->s);
- else
- s = arg->s;
- if (!s || *s == '\0') return 0; /* non existance or empty is false(0) */
- v = strtol(s, &r, 0);
- if (*r == '\0') /* entire string converted, treat as number */
- return v;
- /* if the entire string didn't convert, then its non-numeric and
- * exists, so its true (1) */
- return 1;
- case CS_TYPE_NUM:
- return arg->n;
- case CS_TYPE_VAR_NUM: /* this implies forced numeric evaluation */
- return var_int_lookup (parse, arg->s);
- break;
- default:
- ne_warn ("Unsupported type %s in arg_eval_bool", expand_token_type(arg->op_type, 1));
- v = 0;
- break;
- }
- return v;
-}
-
-char *arg_eval_str_alloc (CSPARSE *parse, CSARG *arg)
-{
- char *s = NULL;
- char buf[256];
- long int n_val;
-
- switch ((arg->op_type & CS_TYPES))
- {
- case CS_TYPE_STRING:
- s = arg->s;
- break;
- case CS_TYPE_VAR:
- s = var_lookup (parse, arg->s);
- break;
- case CS_TYPE_NUM:
- case CS_TYPE_VAR_NUM:
- s = buf;
- n_val = arg_eval_num (parse, arg);
- snprintf (buf, sizeof(buf), "%ld", n_val);
- break;
- default:
- ne_warn ("Unsupported type %s in arg_eval_str_alloc",
- expand_token_type(arg->op_type, 1));
- s = NULL;
- break;
- }
- if (s) return strdup(s);
- return NULL;
-}
-
-#if DEBUG_EXPR_EVAL
-static void expand_arg (CSPARSE *parse, int depth, char *where, CSARG *arg)
-{
- int x;
-
- for (x=0; x<depth; x++)
- fputc(' ', stderr);
-
- fprintf(stderr, "%s op: %s alloc: %d value: ", where, expand_token_type(arg->op_type, 0), arg->alloc);
- if (arg->op_type & CS_OP_NOT)
- fprintf(stderr, "!");
- if (arg->op_type & CS_OP_NUM)
- fprintf(stderr, "#");
- if (arg->op_type & CS_OP_EXISTS)
- fprintf(stderr, "?");
- if (arg->op_type & (CS_TYPE_VAR_NUM | CS_TYPE_NUM))
- fprintf(stderr, "#");
- if (arg->op_type & CS_TYPE_NUM)
- fprintf(stderr, "%ld\n", arg->n);
- else if (arg->op_type & CS_TYPE_STRING)
- fprintf(stderr, "'%s'\n", arg->s);
- else if (arg->op_type & CS_TYPE_VAR)
- fprintf(stderr, "%s = %s\n", arg->s, var_lookup(parse, arg->s));
- else if (arg->op_type & CS_TYPE_VAR_NUM)
- fprintf(stderr, "%s = %ld\n", arg->s, var_int_lookup(parse, arg->s));
- else
- fprintf(stderr, "\n");
-}
-#endif
-
-static NEOERR *eval_expr_string(CSPARSE *parse, CSARG *arg1, CSARG *arg2, CSTOKEN_TYPE op, CSARG *result)
-{
- char *s1, *s2;
- int out;
-
- result->op_type = CS_TYPE_NUM;
- s1 = arg_eval (parse, arg1);
- s2 = arg_eval (parse, arg2);
-
- if ((s1 == NULL) || (s2 == NULL))
- {
- switch (op)
- {
- case CS_OP_EQUAL:
- result->n = (s1 == s2) ? 1 : 0;
- break;
- case CS_OP_NEQUAL:
- result->n = (s1 != s2) ? 1 : 0;
- break;
- case CS_OP_LT:
- result->n = ((s1 == NULL) && (s2 != NULL)) ? 1 : 0;
- break;
- case CS_OP_LTE:
- result->n = (s1 == NULL) ? 1 : 0;
- break;
- case CS_OP_GT:
- result->n = ((s1 != NULL) && (s2 == NULL)) ? 1 : 0;
- break;
- case CS_OP_GTE:
- result->n = (s2 == NULL) ? 1 : 0;
- break;
- case CS_OP_ADD:
- /* be sure to transfer ownership of the string here */
- result->op_type = CS_TYPE_STRING;
- if (s1 == NULL)
- {
- result->s = s2;
- result->alloc = arg2->alloc;
- arg2->alloc = 0;
- }
- else
- {
- result->s = s1;
- result->alloc = arg1->alloc;
- arg1->alloc = 0;
- }
- break;
- default:
- ne_warn ("Unsupported op %s in eval_expr", expand_token_type(op, 1));
- break;
- }
- }
- else
- {
- out = strcmp (s1, s2);
- switch (op)
- {
- case CS_OP_EQUAL:
- result->n = (!out) ? 1 : 0;
- break;
- case CS_OP_NEQUAL:
- result->n = (out) ? 1 : 0;
- break;
- case CS_OP_LT:
- result->n = (out < 0) ? 1 : 0;
- break;
- case CS_OP_LTE:
- result->n = (out <= 0) ? 1 : 0;
- break;
- case CS_OP_GT:
- result->n = (out > 0) ? 1 : 0;
- break;
- case CS_OP_GTE:
- result->n = (out >= 0) ? 1 : 0;
- break;
- case CS_OP_ADD:
- result->op_type = CS_TYPE_STRING;
- result->alloc = 1;
- result->s = (char *) calloc ((strlen(s1) + strlen(s2) + 1), sizeof(char));
- if (result->s == NULL)
- return nerr_raise (NERR_NOMEM, "Unable to allocate memory to concatenate strings in expression: %s + %s", s1, s2);
- strcpy(result->s, s1);
- strcat(result->s, s2);
- break;
- default:
- ne_warn ("Unsupported op %s in eval_expr_string", expand_token_type(op, 1));
- break;
- }
- }
- return STATUS_OK;
-}
-
-static NEOERR *eval_expr_num(CSPARSE *parse, CSARG *arg1, CSARG *arg2, CSTOKEN_TYPE op, CSARG *result)
-{
- long int n1, n2;
-
- result->op_type = CS_TYPE_NUM;
- n1 = arg_eval_num (parse, arg1);
- n2 = arg_eval_num (parse, arg2);
-
- switch (op)
- {
- case CS_OP_EQUAL:
- result->n = (n1 == n2) ? 1 : 0;
- break;
- case CS_OP_NEQUAL:
- result->n = (n1 != n2) ? 1 : 0;
- break;
- case CS_OP_LT:
- result->n = (n1 < n2) ? 1 : 0;
- break;
- case CS_OP_LTE:
- result->n = (n1 <= n2) ? 1 : 0;
- break;
- case CS_OP_GT:
- result->n = (n1 > n2) ? 1 : 0;
- break;
- case CS_OP_GTE:
- result->n = (n1 >= n2) ? 1 : 0;
- break;
- case CS_OP_ADD:
- result->n = (n1 + n2);
- break;
- case CS_OP_SUB:
- result->n = (n1 - n2);
- break;
- case CS_OP_MULT:
- result->n = (n1 * n2);
- break;
- case CS_OP_DIV:
- if (n2 == 0) result->n = UINT_MAX;
- else result->n = (n1 / n2);
- break;
- case CS_OP_MOD:
- if (n2 == 0) result->n = 0;
- else result->n = (n1 % n2);
- break;
- default:
- ne_warn ("Unsupported op %s in eval_expr_num", expand_token_type(op, 1));
- break;
- }
- return STATUS_OK;
-}
-
-static NEOERR *eval_expr_bool(CSPARSE *parse, CSARG *arg1, CSARG *arg2, CSTOKEN_TYPE op, CSARG *result)
-{
- long int n1, n2;
-
- result->op_type = CS_TYPE_NUM;
- n1 = arg_eval_bool (parse, arg1);
- n2 = arg_eval_bool (parse, arg2);
-
- switch (op)
- {
- case CS_OP_AND:
- result->n = (n1 && n2) ? 1 : 0;
- break;
- case CS_OP_OR:
- result->n = (n1 || n2) ? 1 : 0;
- break;
- default:
- ne_warn ("Unsupported op %s in eval_expr_bool", expand_token_type(op, 1));
- break;
- }
- return STATUS_OK;
-}
-
-#if DEBUG_EXPR_EVAL
-static int _depth = 0;
-#endif
-
-static NEOERR *eval_expr (CSPARSE *parse, CSARG *expr, CSARG *result)
-{
- NEOERR *err;
-
- if (expr == NULL)
- return nerr_raise (NERR_ASSERT, "expr is NULL");
- if (result == NULL)
- return nerr_raise (NERR_ASSERT, "result is NULL");
-
-#if DEBUG_EXPR_EVAL
- _depth++;
- expand_arg(parse, _depth, "expr", expr);
-#endif
-
- memset(result, 0, sizeof(CSARG));
- if (expr->op_type & CS_TYPES)
- {
- *result = *expr;
- /* we transfer ownership of the string here.. ugh */
- if (expr->alloc) expr->alloc = 0;
-#if DEBUG_EXPR_EVAL
- expand_arg(parse, _depth, "result", result);
- _depth--;
-#endif
- return STATUS_OK;
- }
-
- if (expr->op_type & CS_OP_LPAREN)
- {
- /* lparen is a no-op, just skip */
- return nerr_pass(eval_expr(parse, expr->expr1, result));
- }
- if (expr->op_type & CS_TYPE_FUNCTION)
- {
- if (expr->function == NULL || expr->function->function == NULL)
- return nerr_raise(NERR_ASSERT,
- "Function is NULL in attempt to evaluate function call %s",
- (expr->function) ? expr->function->name : "");
-
- /* The function evaluates all the arguments, so don't pre-evaluate
- * argument1 */
- err = expr->function->function(parse, expr->function, expr->expr1, result);
- if (err) return nerr_pass(err);
- /* Indicate whether or not an explicit escape call was made by
- * setting the mode (usually NONE or FUNCTION). This is ORed to
- * ensure that escaping calls within other functions do not get
- * double-escaped. E.g. slice(html_escape(foo), 10, 20) */
- parse->escaping.current |= expr->function->escape;
- }
- else
- {
- CSARG arg1, arg2;
- arg1.alloc = 0;
- arg2.alloc = 0;
-
- err = eval_expr (parse, expr->expr1, &arg1);
- if (err) return nerr_pass(err);
-#if DEBUG_EXPR_EVAL
- expand_arg(parse, _depth, "arg1", &arg1);
-#endif
- if (expr->op_type & CS_OPS_UNARY)
- {
- result->op_type = CS_TYPE_NUM;
- switch (expr->op_type) {
- case CS_OP_NOT:
- result->n = arg_eval_bool(parse, &arg1) ? 0 : 1;
- break;
- case CS_OP_EXISTS:
- if (arg1.op_type & (CS_TYPE_VAR | CS_TYPE_VAR_NUM))
- {
- if (arg_eval(parse, &arg1) == NULL)
- result->n = 0;
- else
- result->n = 1;
- }
- else
- {
- /* All numbers/strings exist */
- result->n = 1;
- }
- break;
- case CS_OP_NUM:
- result->n = arg_eval_num (parse, &arg1);
- break;
- case CS_OP_LPAREN:
- return nerr_raise(NERR_ASSERT, "LPAREN should be handled above");
- default:
- result->n = 0;
- ne_warn ("Unsupported op %s in eval_expr", expand_token_type(expr->op_type, 1));
- break;
- }
- }
- else if (expr->op_type == CS_OP_COMMA)
- {
- /* The comma operator, like in C, we return the value of the right
- * most argument, in this case that's expr1, but we still need to
- * evaluate the other stuff */
- if (expr->next)
- {
- err = eval_expr (parse, expr->next, &arg2);
-#if DEBUG_EXPR_EVAL
- expand_arg(parse, _depth, "arg2", &arg2);
-#endif
- if (err) return nerr_pass(err);
- if (arg2.alloc) free(arg2.s);
- }
- *result = arg1;
- /* we transfer ownership of the string here.. ugh */
- if (arg1.alloc) arg1.alloc = 0;
-#if DEBUG_EXPR_EVAL
- expand_arg(parse, _depth, "result", result);
- _depth--;
-#endif
- return STATUS_OK;
- }
- else
- {
- err = eval_expr (parse, expr->expr2, &arg2);
-#if DEBUG_EXPR_EVAL
- expand_arg(parse, _depth, "arg2", &arg2);
-#endif
- if (err) return nerr_pass(err);
-
- if (expr->op_type == CS_OP_LBRACKET)
- {
- /* the bracket op is essentially hdf array lookups, which just
- * means appending the value of arg2, .0 */
- result->op_type = CS_TYPE_VAR;
- result->alloc = 1;
- if (arg2.op_type & (CS_TYPE_VAR_NUM | CS_TYPE_NUM))
- {
- long int n2 = arg_eval_num (parse, &arg2);
- result->s = sprintf_alloc("%s.%ld", arg1.s, n2);
- if (result->s == NULL)
- return nerr_raise (NERR_NOMEM, "Unable to allocate memory to concatenate varnames in expression: %s + %ld", arg1.s, n2);
- }
- else
- {
- char *s2 = arg_eval (parse, &arg2);
- if (s2 && s2[0])
- {
- result->s = sprintf_alloc("%s.%s", arg1.s, s2);
- if (result->s == NULL)
- return nerr_raise (NERR_NOMEM, "Unable to allocate memory to concatenate varnames in expression: %s + %s", arg1.s, s2);
- }
- else
- {
- /* if s2 doesn't match anything, then the whole thing is empty */
- result->s = "";
- result->alloc = 0;
- }
- }
- }
- else if (expr->op_type == CS_OP_DOT)
- {
- /* the dot op is essentially extending the hdf name, which just
- * means appending the string .0 */
- result->op_type = CS_TYPE_VAR;
- result->alloc = 1;
- if (arg2.op_type & CS_TYPES_VAR)
- {
- result->s = sprintf_alloc("%s.%s", arg1.s, arg2.s);
- if (result->s == NULL)
- return nerr_raise (NERR_NOMEM, "Unable to allocate memory to concatenate varnames in expression: %s + %s", arg1.s, arg2.s);
- }
- else
- {
- if (arg2.op_type & CS_TYPE_NUM)
- {
- long int n2 = arg_eval_num (parse, &arg2);
- result->s = sprintf_alloc("%s.%ld", arg1.s, n2);
- if (result->s == NULL)
- return nerr_raise (NERR_NOMEM, "Unable to allocate memory to concatenate varnames in expression: %s + %ld", arg1.s, n2);
- }
- else
- {
- char *s2 = arg_eval (parse, &arg2);
- if (s2 && s2[0])
- {
- result->s = sprintf_alloc("%s.%s", arg1.s, s2);
- if (result->s == NULL)
- return nerr_raise (NERR_NOMEM, "Unable to allocate memory to concatenate varnames in expression: %s + %s", arg1.s, s2);
- }
- else
- {
- /* if s2 doesn't match anything, then the whole thing is empty */
- result->s = "";
- result->alloc = 0;
- }
- }
- }
- }
- else if (expr->op_type & (CS_OP_AND | CS_OP_OR))
- {
- /* eval as bool */
- err = eval_expr_bool (parse, &arg1, &arg2, expr->op_type, result);
- }
- else if ((arg1.op_type & (CS_TYPE_NUM | CS_TYPE_VAR_NUM)) ||
- (arg2.op_type & (CS_TYPE_NUM | CS_TYPE_VAR_NUM)) ||
- (expr->op_type & (CS_OP_AND | CS_OP_OR | CS_OP_SUB | CS_OP_MULT | CS_OP_DIV | CS_OP_MOD | CS_OP_GT | CS_OP_GTE | CS_OP_LT | CS_OP_LTE)))
- {
- /* eval as num */
- err = eval_expr_num(parse, &arg1, &arg2, expr->op_type, result);
- }
- else /* eval as string */
- {
- err = eval_expr_string(parse, &arg1, &arg2, expr->op_type, result);
- }
- }
- if (arg1.alloc) free(arg1.s);
- if (arg2.alloc) free(arg2.s);
- }
-
-#if DEBUG_EXPR_EVAL
- expand_arg(parse, _depth, "result", result);
- _depth--;
-#endif
- return STATUS_OK;
-}
-
-static NEOERR *var_eval (CSPARSE *parse, CSTREE *node, CSTREE **next)
-{
- NEOERR *err = STATUS_OK;
- CSARG val;
-
- parse->escaping.current = NEOS_ESCAPE_NONE;
- err = eval_expr(parse, &(node->arg1), &val);
- if (err) return nerr_pass(err);
- if (val.op_type & (CS_TYPE_NUM | CS_TYPE_VAR_NUM))
- {
- char buf[256];
- long int n_val;
-
- n_val = arg_eval_num (parse, &val);
- snprintf (buf, sizeof(buf), "%ld", n_val);
- err = parse->output_cb (parse->output_ctx, buf);
- }
- else
- {
- char *s = arg_eval (parse, &val);
- /* Determine if the node has been escaped by an explicit function. If not
- * call to escape. node->escape should contain the default escaping from
- * Config.VarEscapeMode and parse->escaping.current will have a non-zero
- * value if an explicit escape call was made sooooo.
- */
- if (s && parse->escaping.current == NEOS_ESCAPE_NONE) /* no explicit escape */
- {
- char *escaped = NULL;
- /* Use default escape if escape is UNDEF */
- if (node->escape == NEOS_ESCAPE_UNDEF)
- err = neos_var_escape(parse->escaping.when_undef, s, &escaped);
- else
- err = neos_var_escape(node->escape, s, &escaped);
-
- if (escaped)
- {
- err = parse->output_cb (parse->output_ctx, escaped);
- free(escaped);
- }
- }
- else if (s)
- { /* already explicitly escaped */
- err = parse->output_cb (parse->output_ctx, s);
- }
- /* Do we set it to blank if s == NULL? */
- }
- if (val.alloc) free(val.s);
-
- *next = node->next;
- return nerr_pass(err);
-}
-
-static NEOERR *lvar_eval (CSPARSE *parse, CSTREE *node, CSTREE **next)
-{
- NEOERR *err = STATUS_OK;
- CSARG val;
-
- err = eval_expr(parse, &(node->arg1), &val);
- if (err) return nerr_pass(err);
- if (val.op_type & (CS_TYPE_NUM | CS_TYPE_VAR_NUM))
- {
- char buf[256];
- long int n_val;
-
- n_val = arg_eval_num (parse, &val);
- snprintf (buf, sizeof(buf), "%ld", n_val);
- err = parse->output_cb (parse->output_ctx, buf);
- }
- else
- {
- char *s = arg_eval (parse, &val);
-
- if (s)
- {
- CSPARSE *cs = NULL;
-
- /* Ok, we need our own copy of the string to pass to
- * cs_parse_string... */
- if (val.alloc && (val.op_type & CS_TYPE_STRING)) {
- val.alloc = 0;
- }
- else
- {
- s = strdup(s);
- if (s == NULL)
- {
- return nerr_raise(NERR_NOMEM, "Unable to allocate memory for lvar_eval");
- }
- }
-
- do {
- err = cs_init_internal(&cs, parse->hdf, parse);
- if (err) break;
- err = cs_parse_string(cs, s, strlen(s));
- if (err) break;
- err = cs_render(cs, parse->output_ctx, parse->output_cb);
- if (err) break;
- } while (0);
- cs_destroy(&cs);
- }
- }
- if (val.alloc) free(val.s);
-
- *next = node->next;
- return nerr_pass(err);
-}
-
-static NEOERR *linclude_eval (CSPARSE *parse, CSTREE *node, CSTREE **next)
-{
- NEOERR *err = STATUS_OK;
- CSARG val;
-
- err = eval_expr(parse, &(node->arg1), &val);
- if (err) return nerr_pass(err);
- if (val.op_type & (CS_TYPE_NUM | CS_TYPE_VAR_NUM))
- {
- char buf[256];
- long int n_val;
-
- n_val = arg_eval_num (parse, &val);
- snprintf (buf, sizeof(buf), "%ld", n_val);
- err = parse->output_cb (parse->output_ctx, buf);
- }
- else
- {
- char *s = arg_eval (parse, &val);
-
- if (s)
- {
- CSPARSE *cs = NULL;
- do {
- err = cs_init_internal(&cs, parse->hdf, parse);
- if (err) break;
- err = cs_parse_file(cs, s);
- if (!(node->flags & CSF_REQUIRED))
- {
- nerr_handle(&err, NERR_NOT_FOUND);
- }
- if (err) break;
- err = cs_render(cs, parse->output_ctx, parse->output_cb);
- if (err) break;
- } while (0);
- cs_destroy(&cs);
- }
- }
- if (val.alloc) free(val.s);
-
- *next = node->next;
- return nerr_pass(err);
-}
-
-/* if the expr evaluates to true, display it, else render the alternate */
-static NEOERR *alt_eval (CSPARSE *parse, CSTREE *node, CSTREE **next)
-{
- NEOERR *err = STATUS_OK;
- CSARG val;
- int eval_true = 1;
-
- err = eval_expr(parse, &(node->arg1), &val);
- if (err) return nerr_pass(err);
- eval_true = arg_eval_bool(parse, &val);
- if (eval_true)
- {
- if (val.op_type & (CS_TYPE_NUM | CS_TYPE_VAR_NUM))
- {
- char buf[256];
- long int n_val;
-
- n_val = arg_eval_num (parse, &val);
- snprintf (buf, sizeof(buf), "%ld", n_val);
- err = parse->output_cb (parse->output_ctx, buf);
- }
- else
- {
- char *s = arg_eval (parse, &val);
- /* Do we set it to blank if s == NULL? */
- if (s)
- {
- err = parse->output_cb (parse->output_ctx, s);
- }
- }
- }
- if (val.alloc) free(val.s);
-
- if (eval_true == 0)
- {
- err = render_node (parse, node->case_0);
- }
-
- *next = node->next;
- return nerr_pass(err);
-}
-
-/* just calls through to the child nodes */
-static NEOERR *escape_eval (CSPARSE *parse, CSTREE *node, CSTREE **next)
-{
- NEOERR *err = STATUS_OK;
- /* TODO(wad): Should I set a eval-time value here? */
- err = render_node (parse, node->case_0);
- *next = node->next;
- return nerr_pass(err);
-}
-
-
-static NEOERR *if_eval (CSPARSE *parse, CSTREE *node, CSTREE **next)
-{
- NEOERR *err = STATUS_OK;
- int eval_true = 0;
- CSARG val;
-
- err = eval_expr(parse, &(node->arg1), &val);
- if (err) return nerr_pass (err);
- eval_true = arg_eval_bool(parse, &val);
- if (val.alloc) free(val.s);
-
- if (eval_true)
- {
- err = render_node (parse, node->case_0);
- }
- else if (node->case_1 != NULL)
- {
- err = render_node (parse, node->case_1);
- }
- *next = node->next;
- return nerr_pass (err);
-}
-
-static NEOERR *else_parse (CSPARSE *parse, int cmd, char *arg)
-{
- NEOERR *err;
- STACK_ENTRY *entry;
-
- /* ne_warn ("else"); */
- err = uListGet (parse->stack, -1, (void *)&entry);
- if (err != STATUS_OK) return nerr_pass(err);
-
- parse->next = &(entry->tree->case_1);
- parse->current = entry->tree;
- return STATUS_OK;
-}
-
-static NEOERR *elif_parse (CSPARSE *parse, int cmd, char *arg)
-{
- NEOERR *err;
- STACK_ENTRY *entry;
-
- /* ne_warn ("elif: %s", arg); */
- err = uListGet (parse->stack, -1, (void *)&entry);
- if (err != STATUS_OK) return nerr_pass(err);
-
- if (entry->next_tree == NULL)
- entry->next_tree = entry->tree;
-
- parse->next = &(entry->tree->case_1);
-
- err = if_parse(parse, cmd, arg);
- entry->tree = parse->current;
- return nerr_pass(err);
-}
-
-static NEOERR *endif_parse (CSPARSE *parse, int cmd, char *arg)
-{
- NEOERR *err;
- STACK_ENTRY *entry;
-
- /* ne_warn ("endif"); */
- err = uListGet (parse->stack, -1, (void *)&entry);
- if (err != STATUS_OK) return nerr_pass(err);
-
- if (entry->next_tree)
- parse->next = &(entry->next_tree->next);
- else
- parse->next = &(entry->tree->next);
- parse->current = entry->tree;
- return STATUS_OK;
-}
-
-static NEOERR *each_with_parse (CSPARSE *parse, int cmd, char *arg)
-{
- NEOERR *err;
- CSTREE *node;
- char *lvar;
- char *p;
- char tmp[256];
-
- err = alloc_node (&node, parse);
- if (err) return nerr_pass(err);
- node->cmd = cmd;
- if (arg[0] == '!')
- node->flags |= CSF_REQUIRED;
- arg++;
-
- p = lvar = neos_strip(arg);
- while (*p && !isspace(*p) && *p != '=') p++;
- if (*p == '\0')
- {
- dealloc_node(&node);
- return nerr_raise (NERR_PARSE,
- "%s Improperly formatted %s directive: %s",
- find_context(parse, -1, tmp, sizeof(tmp)), Commands[cmd].cmd, arg);
- }
- if (*p != '=')
- {
- *p++ = '\0';
- while (*p && *p != '=') p++;
- if (*p == '\0')
- {
- dealloc_node(&node);
- return nerr_raise (NERR_PARSE,
- "%s Improperly formatted %s directive: %s",
- find_context(parse, -1, tmp, sizeof(tmp)), Commands[cmd].cmd, arg);
- }
- p++;
- }
- else
- {
- *p++ = '\0';
- }
- while (*p && isspace(*p)) p++;
- if (*p == '\0')
- {
- dealloc_node(&node);
- return nerr_raise (NERR_PARSE,
- "%s Improperly formatted %s directive: %s",
- find_context(parse, -1, tmp, sizeof(tmp)), Commands[cmd].cmd, arg);
- }
- node->arg1.op_type = CS_TYPE_VAR;
- node->arg1.s = lvar;
-
- err = parse_expr(parse, p, 0, &(node->arg2));
- if (err)
- {
- dealloc_node(&node);
- return nerr_pass(err);
- }
- /* ne_warn ("each %s %s", lvar, p); */
-
- *(parse->next) = node;
- parse->next = &(node->case_0);
- parse->current = node;
-
- return STATUS_OK;
-}
-
-static NEOERR *each_eval (CSPARSE *parse, CSTREE *node, CSTREE **next)
-{
- NEOERR *err = STATUS_OK;
- CS_LOCAL_MAP each_map;
- CSARG val;
- HDF *var, *child;
-
- memset(&each_map, 0, sizeof(each_map));
-
- err = eval_expr(parse, &(node->arg2), &val);
- if (err) return nerr_pass(err);
-
- if (val.op_type == CS_TYPE_VAR)
- {
- var = var_lookup_obj (parse, val.s);
-
- if (var != NULL)
- {
- /* Init and install local map */
- each_map.type = CS_TYPE_VAR;
- each_map.name = node->arg1.s;
- each_map.next = parse->locals;
- each_map.first = 1;
- each_map.last = 0;
- parse->locals = &each_map;
-
- do
- {
- child = hdf_obj_child (var);
- while (child != NULL)
- {
- /* We don't explicitly set each_map.last here since checking
- * requires a function call, so we move the check to _builtin_last
- * so it only makes the call if last() is being used */
- each_map.h = child;
- err = render_node (parse, node->case_0);
- if (each_map.map_alloc) {
- free(each_map.s);
- each_map.s = NULL;
- }
- if (each_map.first) each_map.first = 0;
- if (err != STATUS_OK) break;
- child = hdf_obj_next (child);
- }
-
- } while (0);
-
- /* Remove local map */
- parse->locals = each_map.next;
- }
- } /* else WARNING */
- if (val.alloc) free(val.s);
-
- *next = node->next;
- return nerr_pass (err);
-}
-
-static NEOERR *with_eval (CSPARSE *parse, CSTREE *node, CSTREE **next)
-{
- NEOERR *err = STATUS_OK;
- CS_LOCAL_MAP with_map;
- CSARG val;
- HDF *var;
-
- memset(&with_map, 0, sizeof(with_map));
-
- err = eval_expr(parse, &(node->arg2), &val);
- if (err) return nerr_pass(err);
-
- if (val.op_type == CS_TYPE_VAR)
- {
- var = var_lookup_obj (parse, val.s);
-
- if (var != NULL)
- {
- /* Init and install local map */
- with_map.type = CS_TYPE_VAR;
- with_map.name = node->arg1.s;
- with_map.next = parse->locals;
- with_map.h = var;
- parse->locals = &with_map;
- err = render_node (parse, node->case_0);
- /* Remove local map */
- if (with_map.map_alloc) free(with_map.s);
- parse->locals = with_map.next;
- }
- }
- else
- {
- /* else WARNING */
- ne_warn("Invalid op_type for with: %s", expand_token_type(val.op_type, 1));
- }
- if (val.alloc) free(val.s);
-
- *next = node->next;
- return nerr_pass (err);
-}
-static NEOERR *end_parse (CSPARSE *parse, int cmd, char *arg)
-{
- NEOERR *err;
- STACK_ENTRY *entry;
-
- err = uListGet (parse->stack, -1, (void *)&entry);
- if (err != STATUS_OK) return nerr_pass(err);
-
- parse->next = &(entry->tree->next);
- parse->current = entry->tree;
- return STATUS_OK;
-}
-
-static NEOERR *include_parse (CSPARSE *parse, int cmd, char *arg)
-{
- NEOERR *err;
- char *s;
- int flags = 0;
- CSARG arg1, val;
-
- memset(&arg1, 0, sizeof(CSARG));
- if (arg[0] == '!')
- flags |= CSF_REQUIRED;
- arg++;
- /* Validate arg is a var (regex /^[#" ]$/) */
- err = parse_expr (parse, arg, 0, &arg1);
- if (err) return nerr_pass(err);
- /* ne_warn ("include: %s", a); */
-
- err = eval_expr(parse, &arg1, &val);
- if (err) return nerr_pass(err);
-
- s = arg_eval (parse, &val);
- if (s == NULL && !(flags & CSF_REQUIRED))
- return STATUS_OK;
- err = cs_parse_file(parse, s);
- if (!(flags & CSF_REQUIRED))
- {
- nerr_handle(&err, NERR_NOT_FOUND);
- }
- if (val.alloc) free(val.s);
-
- return nerr_pass (err);
-}
-
-static NEOERR *def_parse (CSPARSE *parse, int cmd, char *arg)
-{
- NEOERR *err;
- CSTREE *node;
- CS_MACRO *macro;
- CSARG *carg, *larg = NULL;
- char *a = NULL, *p = NULL, *s;
- char tmp[256];
- char name[256];
- int x = 0;
- BOOL last = FALSE;
-
- /* Since def doesn't get a new stack entry until after this is run,
- * setup a dumb var on the parse object to hold the future setting.
- */
- parse->escaping.next_stack = NEOS_ESCAPE_UNDEF;
-
- err = alloc_node (&node, parse);
- if (err) return nerr_pass(err);
- node->cmd = cmd;
- arg++;
- s = arg;
- while (*s && *s != ' ' && *s != '#' && *s != '(')
- {
- name[x++] = *s;
- s++;
- }
- name[x] = '\0';
- while (*s && isspace(*s)) s++;
- if (*s == '\0' || *s != '(')
- {
- dealloc_node(&node);
- return nerr_raise (NERR_PARSE,
- "%s Missing left paren in macro def %s",
- find_context(parse, -1, tmp, sizeof(tmp)), arg);
- }
- s++;
- /* Check to see if this is a redefinition */
- macro = parse->macros;
- while (macro != NULL)
- {
- if (!strcmp(macro->name, name))
- {
- dealloc_node(&node);
- return nerr_raise (NERR_PARSE,
- "%s Duplicate macro def for %s",
- find_context(parse, -1, tmp, sizeof(tmp)), arg);
- }
- macro = macro->next;
- }
-
- macro = (CS_MACRO *) calloc (1, sizeof (CS_MACRO));
- if (macro) macro->name = strdup(name);
- if (macro == NULL || macro->name == NULL)
- {
- dealloc_node(&node);
- dealloc_macro(&macro);
- return nerr_raise (NERR_NOMEM,
- "%s Unable to allocate memory for CS_MACRO in def %s",
- find_context(parse, -1, tmp, sizeof(tmp)), arg);
- }
-
- while (*s)
- {
- while (*s && isspace(*s)) s++;
- a = strpbrk(s, ",)");
- if (a == NULL)
- {
- err = nerr_raise (NERR_PARSE,
- "%s Missing right paren in def %s",
- find_context(parse, -1, tmp, sizeof(tmp)), arg);
- break;
- }
- if (*a == ')') last = TRUE;
- *a = '\0';
- /* cut out ending whitespace */
- p = strpbrk(s, " \t\r\n");
- if (p != NULL) *p = '\0';
- p = strpbrk(s, "\"?<>=!#-+|&,)*/%[]( \t\r\n");
- if (p != NULL)
- {
- err = nerr_raise (NERR_PARSE,
- "%s Invalid character in def %s argument: %c",
- find_context(parse, -1, tmp, sizeof(tmp)), arg, *p);
- break;
- }
- /* No argument case */
- if (*s == '\0' && macro->n_args == 0) break;
- if (*s == '\0')
- {
- err = nerr_raise (NERR_PARSE,
- "%s Missing argument name or extra comma in def %s",
- find_context(parse, -1, tmp, sizeof(tmp)), arg);
- break;
- }
- carg = (CSARG *) calloc (1, sizeof(CSARG));
- if (carg == NULL)
- {
- err = nerr_raise (NERR_NOMEM,
- "%s Unable to allocate memory for CSARG in def %s",
- find_context(parse, -1, tmp, sizeof(tmp)), arg);
- break;
- }
- if (larg == NULL)
- {
- macro->args = carg;
- larg = carg;
- }
- else
- {
- larg->next = carg;
- larg = carg;
- }
- macro->n_args++;
- carg->s = s;
- if (last == TRUE) break;
- s = a+1;
- }
- if (err)
- {
- dealloc_node(&node);
- dealloc_macro(&macro);
- return nerr_pass(err);
- }
-
- macro->tree = node;
- if (parse->macros)
- {
- macro->next = parse->macros;
- }
- parse->macros = macro;
-
- *(parse->next) = node;
- parse->next = &(node->case_0);
- parse->current = node;
-
- return STATUS_OK;
-}
-
-static int rearrange_for_call(CSARG **args)
-{
- CSARG *larg = NULL;
- CSARG *carg = *args;
- CSARG *vargs = NULL;
- int nargs = 0;
-
- /* multiple argument case, we have to walk the args and reverse
- * them. Also handles single arg case since its the same as the
- * last arg */
- while (carg)
- {
- nargs++;
- if (carg->op_type != CS_OP_COMMA)
- {
- /* last argument */
- if (vargs)
- carg->next = vargs;
- vargs = carg;
- break;
- }
- if (vargs)
- carg->expr1->next = vargs;
- vargs = carg->expr1;
- larg = carg;
- carg = carg->next;
- /* dealloc comma, but not its descendents */
- larg->next = NULL;
- larg->expr1 = NULL;
- dealloc_arg(&larg);
- }
- *args = vargs;
-
- return nargs;
-}
-
-static NEOERR *call_parse (CSPARSE *parse, int cmd, char *arg)
-{
- NEOERR *err;
- CSTREE *node;
- CS_MACRO *macro;
- CSARG *carg;
- char *s, *a = NULL;
- char tmp[256];
- char name[256];
- int x = 0;
- int nargs = 0;
- STACK_ENTRY *entry;
-
- err = uListGet (parse->stack, -1, (void *)&entry);
- if (err != STATUS_OK) return nerr_pass(err);
-
- err = alloc_node (&node, parse);
- if (err) return nerr_pass(err);
- node->cmd = cmd;
- node->escape = entry->escape;
- arg++;
- s = arg;
- while (x < sizeof(name) && *s && *s != ' ' && *s != '#' && *s != '(')
- {
- name[x++] = *s;
- s++;
- }
- name[x] = '\0';
- while (*s && isspace(*s)) s++;
- if (*s == '\0' || *s != '(')
- {
- dealloc_node(&node);
- return nerr_raise (NERR_PARSE,
- "%s Missing left paren in call %s",
- find_context(parse, -1, tmp, sizeof(tmp)), arg);
- }
- s++;
- /* Check to see if this macro exists */
- macro = parse->macros;
- while (macro != NULL)
- {
- if (!strcmp(macro->name, name)) break;
- macro = macro->next;
- }
- if (macro == NULL)
- {
- dealloc_node(&node);
- err = nerr_raise (NERR_PARSE, "%s Undefined macro called: %s",
- find_context(parse, -1, tmp, sizeof(tmp)), arg);
- if (parse->audit_mode) {
- /* Ignore macros that cannot be found */
- return _store_error(parse, err);
- }
- else {
- return err;
- }
- }
- node->arg1.op_type = CS_TYPE_MACRO;
- node->arg1.macro = macro;
-
- a = strrchr(s, ')');
- if (a == NULL)
- {
- dealloc_node(&node);
- return nerr_raise (NERR_PARSE,
- "%s Missing right paren in call %s",
- find_context(parse, -1, tmp, sizeof(tmp)), arg);
- }
- *a = '\0';
-
- while (*s && isspace(*s)) s++;
- /* No arguments case */
- if (*s == '\0')
- {
- nargs = 0;
- }
- else
- {
- /* Parse arguments case */
- do
- {
- carg = (CSARG *) calloc (1, sizeof(CSARG));
- if (carg == NULL)
- {
- err = nerr_raise (NERR_NOMEM,
- "%s Unable to allocate memory for CSARG in call %s",
- find_context(parse, -1, tmp, sizeof(tmp)), arg);
- break;
- }
- err = parse_expr (parse, s, 0, carg);
- if (err) break;
- nargs = rearrange_for_call(&carg);
- node->vargs = carg;
- } while (0);
- }
- if (!err && nargs != macro->n_args)
- {
- err = nerr_raise (NERR_PARSE,
- "%s Incorrect number of arguments, expected %d, got %d in call to macro %s: %s",
- find_context(parse, -1, tmp, sizeof(tmp)), macro->n_args, nargs,
- macro->name, arg);
- }
- if (err)
- {
- dealloc_node(&node);
- return nerr_pass(err);
- }
-
- *(parse->next) = node;
- parse->next = &(node->next);
- parse->current = node;
-
- return STATUS_OK;
-}
-
-static NEOERR *call_eval (CSPARSE *parse, CSTREE *node, CSTREE **next)
-{
- NEOERR *err = STATUS_OK;
- CS_LOCAL_MAP *call_map, *map;
- CS_MACRO *macro;
- CSARG *carg, *darg;
- HDF *var;
- int x;
-
- /* Reset the value of when_undef for the coming call evaluation.
- * This is only used here so it there's no need to reset its value after
- * the call. If this call is nested (escape == NEOS_ESCAPE_UNDEF), then
- * leave the when_undef variable alone. The parent call_eval should have
- * already defined it.
- */
- if (node->escape != NEOS_ESCAPE_UNDEF)
- parse->escaping.when_undef = node->escape;
-
- macro = node->arg1.macro;
- if (macro->n_args)
- {
- call_map = (CS_LOCAL_MAP *) calloc (macro->n_args, sizeof(CS_LOCAL_MAP));
- if (call_map == NULL)
- return nerr_raise (NERR_NOMEM,
- "Unable to allocate memory for call_map in call_eval of %s",
- macro->name);
- }
- else
- {
- call_map = NULL;
- }
-
- darg = macro->args;
- carg = node->vargs;
-
- for (x = 0; x < macro->n_args; x++)
- {
- CSARG val;
- map = &call_map[x];
- if (x) call_map[x-1].next = map;
-
- map->name = darg->s;
- err = eval_expr(parse, carg, &val);
- if (err) break;
- if (val.op_type & CS_TYPE_STRING)
- {
- map->s = val.s;
- map->type = val.op_type;
- map->map_alloc = val.alloc;
- val.alloc = 0;
- }
- else if (val.op_type & CS_TYPE_NUM)
- {
- map->n = val.n;
- map->type = CS_TYPE_NUM;
- }
- else if (val.op_type & (CS_TYPE_VAR | CS_TYPE_VAR_NUM))
- {
- CS_LOCAL_MAP *lmap;
- char *c;
- lmap = lookup_map (parse, val.s, &c);
- if (lmap != NULL && (lmap->type != CS_TYPE_VAR && lmap->type != CS_TYPE_VAR_NUM))
- {
- /* if we're referencing a local var which maps to a string or
- * number... then copy */
- if (lmap->type == CS_TYPE_NUM)
- {
- map->n = lmap->n;
- map->type = lmap->type;
- }
- else
- {
- map->s = lmap->s;
- map->type = lmap->type;
- }
- }
- else
- {
- var = var_lookup_obj (parse, val.s);
- map->h = var;
- map->type = CS_TYPE_VAR;
- /* Bring across the name we're mapping to, in case h doesn't exist and
- * we need to set it. */
- map->s = val.s;
- map->map_alloc = val.alloc;
- val.alloc = 0;
- }
- }
- else
- {
- ne_warn("Unsupported type %s in call_expr", expand_token_type(val.op_type, 1));
- }
- if (val.alloc) free(val.s);
- map->next = parse->locals;
-
- darg = darg->next;
- carg = carg->next;
- }
-
- if (err == STATUS_OK)
- {
- map = parse->locals;
- if (macro->n_args) parse->locals = call_map;
- err = render_node (parse, macro->tree->case_0);
- parse->locals = map;
- }
- for (x = 0; x < macro->n_args; x++)
- {
- if (call_map[x].map_alloc) free(call_map[x].s);
- }
- if (call_map) free (call_map);
-
- *next = node->next;
- return nerr_pass(err);
-}
-
-static NEOERR *set_parse (CSPARSE *parse, int cmd, char *arg)
-{
- NEOERR *err;
- CSTREE *node;
- char *s;
- char tmp[256];
-
- err = alloc_node (&node, parse);
- if (err) return nerr_pass(err);
- node->cmd = cmd;
- arg++;
- s = arg;
- while (*s && *s != '=') s++;
- if (*s == '\0')
- {
- dealloc_node(&node);
- return nerr_raise (NERR_PARSE,
- "%s Missing equals in set %s",
- find_context(parse, -1, tmp, sizeof(tmp)), arg);
- }
- *s = '\0';
- s++;
- err = parse_expr(parse, arg, 1, &(node->arg1));
- if (err)
- {
- dealloc_node(&node);
- return nerr_pass(err);
- }
-
- err = parse_expr(parse, s, 0, &(node->arg2));
- if (err)
- {
- dealloc_node(&node);
- return nerr_pass(err);
- }
-
- *(parse->next) = node;
- parse->next = &(node->next);
- parse->current = node;
-
- return STATUS_OK;
-}
-
-static NEOERR *set_eval (CSPARSE *parse, CSTREE *node, CSTREE **next)
-{
- NEOERR *err = STATUS_OK;
- CSARG val;
- CSARG set;
-
- err = eval_expr(parse, &(node->arg1), &set);
- if (err) return nerr_pass (err);
- err = eval_expr(parse, &(node->arg2), &val);
- if (err) {
- if (set.alloc) free(set.s);
- return nerr_pass (err);
- }
-
- if (set.op_type != CS_TYPE_NUM)
- {
- /* this allow for a weirdness where set:"foo"="bar"
- * actually sets the hdf var foo... */
- if (val.op_type & (CS_TYPE_NUM | CS_TYPE_VAR_NUM))
- {
- char buf[256];
- long int n_val;
-
- n_val = arg_eval_num (parse, &val);
- snprintf (buf, sizeof(buf), "%ld", n_val);
- if (set.s)
- {
- err = var_set_value (parse, set.s, buf);
- }
- else
- {
- err = nerr_raise(NERR_ASSERT,
- "lvalue is NULL/empty in attempt to evaluate set to '%s'", buf);
- }
- }
- else
- {
- char *s = arg_eval (parse, &val);
- /* Do we set it to blank if s == NULL? */
- if (set.s)
- {
- err = var_set_value (parse, set.s, s);
- }
- else
- {
- err = nerr_raise(NERR_ASSERT,
- "lvalue is NULL/empty in attempt to evaluate set to '%s'",
- (s) ? s : "");
- }
- }
- } /* else WARNING */
- if (set.alloc) free(set.s);
- if (val.alloc) free(val.s);
-
- *next = node->next;
- return nerr_pass (err);
-}
-
-static NEOERR *loop_parse (CSPARSE *parse, int cmd, char *arg)
-{
- NEOERR *err;
- CSTREE *node;
- CSARG *carg, *larg = NULL;
- BOOL last = FALSE;
- char *lvar;
- char *p, *a;
- char tmp[256];
- int x;
-
- err = alloc_node (&node, parse);
- if (err) return nerr_pass(err);
- node->cmd = cmd;
- if (arg[0] == '!')
- node->flags |= CSF_REQUIRED;
- arg++;
-
- p = lvar = neos_strip(arg);
- while (*p && !isspace(*p) && *p != '=') p++;
- if (*p == '\0')
- {
- dealloc_node(&node);
- return nerr_raise (NERR_PARSE,
- "%s Improperly formatted loop directive: %s",
- find_context(parse, -1, tmp, sizeof(tmp)), arg);
- }
- if (*p != '=')
- {
- *p++ = '\0';
- while (*p && *p != '=') p++;
- if (*p == '\0')
- {
- dealloc_node(&node);
- return nerr_raise (NERR_PARSE,
- "%s Improperly formatted loop directive: %s",
- find_context(parse, -1, tmp, sizeof(tmp)), arg);
- }
- p++;
- }
- else
- {
- *p++ = '\0';
- }
- while (*p && isspace(*p)) p++;
- if (*p == '\0')
- {
- dealloc_node(&node);
- return nerr_raise (NERR_PARSE,
- "%s Improperly formatted loop directive: %s",
- find_context(parse, -1, tmp, sizeof(tmp)), arg);
- }
- node->arg1.op_type = CS_TYPE_VAR;
- node->arg1.s = lvar;
-
- x = 0;
- while (*p)
- {
- carg = (CSARG *) calloc (1, sizeof(CSARG));
- if (carg == NULL)
- {
- err = nerr_raise (NERR_NOMEM,
- "%s Unable to allocate memory for CSARG in loop %s",
- find_context(parse, -1, tmp, sizeof(tmp)), arg);
- break;
- }
- if (larg == NULL)
- {
- node->vargs = carg;
- larg = carg;
- }
- else
- {
- larg->next = carg;
- larg = carg;
- }
- x++;
- a = strpbrk(p, ",");
- if (a == NULL) last = TRUE;
- else *a = '\0';
- err = parse_expr (parse, p, 0, carg);
- if (err) break;
- if (last == TRUE) break;
- p = a+1;
- }
- if (!err && ((x < 1) || (x > 3)))
- {
- err = nerr_raise (NERR_PARSE,
- "%s Incorrect number of arguments, expected 1, 2, or 3 got %d in loop: %s",
- find_context(parse, -1, tmp, sizeof(tmp)), x, arg);
- }
-
- /* ne_warn ("loop %s %s", lvar, p); */
-
- *(parse->next) = node;
- parse->next = &(node->case_0);
- parse->current = node;
-
- return STATUS_OK;
-}
-
-static NEOERR *loop_eval (CSPARSE *parse, CSTREE *node, CSTREE **next)
-{
- NEOERR *err = STATUS_OK;
- CS_LOCAL_MAP each_map;
- int var;
- int start = 0, end = 0, step = 1;
- int x, iter = 1;
- CSARG *carg;
- CSARG val;
-
- memset(&each_map, 0, sizeof(each_map));
-
- carg = node->vargs;
- if (carg == NULL) return nerr_raise (NERR_ASSERT, "No arguments in loop eval?");
- err = eval_expr(parse, carg, &val);
- if (err) return nerr_pass(err);
- end = arg_eval_num(parse, &val);
- if (val.alloc) free(val.s);
- if (carg->next)
- {
- start = end;
- carg = carg->next;
- err = eval_expr(parse, carg, &val);
- if (err) return nerr_pass(err);
- end = arg_eval_num(parse, &val);
- if (val.alloc) free(val.s);
- if (carg->next)
- {
- carg = carg->next;
- err = eval_expr(parse, carg, &val);
- if (err) return nerr_pass(err);
- step = arg_eval_num(parse, &val);
- if (val.alloc) free(val.s);
- }
- }
- if (((step < 0) && (start < end)) ||
- ((step > 0) && (end < start)))
- {
- iter = 0;
- }
- else if (step == 0)
- {
- iter = 0;
- }
- else
- {
- iter = abs((end - start) / step + 1);
- }
-
- if (iter > 0)
- {
- /* Init and install local map */
- each_map.type = CS_TYPE_NUM;
- each_map.name = node->arg1.s;
- each_map.next = parse->locals;
- each_map.first = 1;
- parse->locals = &each_map;
-
- var = start;
- for (x = 0, var = start; x < iter; x++, var += step)
- {
- if (x == iter - 1) each_map.last = 1;
- each_map.n = var;
- err = render_node (parse, node->case_0);
- if (each_map.map_alloc) {
- free(each_map.s);
- each_map.s = NULL;
- }
- if (each_map.first) each_map.first = 0;
- if (err != STATUS_OK) break;
- }
-
- /* Remove local map */
- parse->locals = each_map.next;
- }
-
- *next = node->next;
- return nerr_pass (err);
-}
-
-static NEOERR *skip_eval (CSPARSE *parse, CSTREE *node, CSTREE **next)
-{
- *next = node->next;
- return STATUS_OK;
-}
-static NEOERR *render_node (CSPARSE *parse, CSTREE *node)
-{
- NEOERR *err = STATUS_OK;
-
- while (node != NULL)
- {
- /* ne_warn ("%s %08x", Commands[node->cmd].cmd, node); */
- err = (*(Commands[node->cmd].eval_handler))(parse, node, &node);
- if (err) break;
- }
- return nerr_pass(err);
-}
-
-NEOERR *cs_render (CSPARSE *parse, void *ctx, CSOUTFUNC cb)
-{
- CSTREE *node;
-
- if (parse->tree == NULL)
- return nerr_raise (NERR_ASSERT, "No parse tree exists");
-
- parse->output_ctx = ctx;
- parse->output_cb = cb;
-
- node = parse->tree;
- return nerr_pass (render_node(parse, node));
-}
-
-/* **** Functions ******************************************** */
-
-NEOERR *cs_register_function(CSPARSE *parse, const char *funcname,
- int n_args, CSFUNCTION function)
-{
- CS_FUNCTION *csf;
-
- /* Should we validate the parseability of the name? */
-
- csf = parse->functions;
- while (csf != NULL)
- {
- if (!strcmp(csf->name, funcname) && csf->function != function)
- {
- return nerr_raise(NERR_DUPLICATE,
- "Attempt to register duplicate function %s", funcname);
- }
- csf = csf->next;
- }
- csf = (CS_FUNCTION *) calloc (1, sizeof(CS_FUNCTION));
- if (csf == NULL)
- return nerr_raise(NERR_NOMEM,
- "Unable to allocate memory to register function %s", funcname);
- csf->name = strdup(funcname);
- if (csf->name == NULL)
- {
- free(csf);
- return nerr_raise(NERR_NOMEM,
- "Unable to allocate memory to register function %s", funcname);
- }
- csf->function = function;
- csf->n_args = n_args;
- csf->escape = NEOS_ESCAPE_NONE;
- csf->next = parse->functions;
- parse->functions = csf;
-
- return STATUS_OK;
-}
-
-/* This is similar to python's PyArg_ParseTuple, :
- * s - string (allocated)
- * i - int
- * A - arg ptr (maybe later)
- */
-NEOERR * cs_arg_parsev(CSPARSE *parse, CSARG *args, const char *fmt,
- va_list ap)
-{
- NEOERR *err = STATUS_OK;
- char **s;
- long int *i;
- CSARG val;
-
- while (*fmt)
- {
- memset(&val, 0, sizeof(val));
- err = eval_expr(parse, args, &val);
- if (err) return nerr_pass(err);
-
- switch (*fmt)
- {
- case 's':
- s = va_arg(ap, char **);
- if (s == NULL)
- {
- err = nerr_raise(NERR_ASSERT,
- "Invalid number of arguments in call to cs_arg_parse");
- break;
- }
- *s = arg_eval_str_alloc(parse, &val);
- break;
- case 'i':
- i = va_arg(ap, long int *);
- if (i == NULL)
- {
- err = nerr_raise(NERR_ASSERT,
- "Invalid number of arguments in call to cs_arg_parse");
- break;
- }
- *i = arg_eval_num(parse, &val);
- break;
- default:
- break;
- }
- if (err) return nerr_pass(err);
- fmt++;
- args = args->next;
- if (val.alloc) free(val.s);
- }
- if (err) return nerr_pass(err);
- return STATUS_OK;
-}
-
-NEOERR * cs_arg_parse(CSPARSE *parse, CSARG *args, const char *fmt, ...)
-{
- NEOERR *err;
- va_list ap;
-
- va_start(ap, fmt);
- err = cs_arg_parsev(parse, args, fmt, ap);
- va_end(ap);
- return nerr_pass(err);
-}
-
-static NEOERR * _builtin_subcount(CSPARSE *parse, CS_FUNCTION *csf, CSARG *args, CSARG *result)
-{
- NEOERR *err;
- HDF *obj;
- int count = 0;
- CSARG val;
-
- memset(&val, 0, sizeof(val));
- err = eval_expr(parse, args, &val);
- if (err) return nerr_pass(err);
-
- /* default for non-vars is 0 children */
- result->op_type = CS_TYPE_NUM;
- result->n = 0;
-
- if (val.op_type & CS_TYPE_VAR)
- {
- obj = var_lookup_obj (parse, val.s);
- if (obj != NULL)
- {
- obj = hdf_obj_child(obj);
- while (obj != NULL)
- {
- count++;
- obj = hdf_obj_next(obj);
- }
- }
- result->n = count;
- }
- if (val.alloc) free(val.s);
-
- return STATUS_OK;
-}
-
-static NEOERR * _builtin_str_length(CSPARSE *parse, CS_FUNCTION *csf, CSARG *args, CSARG *result)
-{
- NEOERR *err;
- CSARG val;
-
- memset(&val, 0, sizeof(val));
- err = eval_expr(parse, args, &val);
- if (err) return nerr_pass(err);
-
- /* non var/string objects have 0 length */
- result->op_type = CS_TYPE_NUM;
- result->n = 0;
-
- if (val.op_type & (CS_TYPE_VAR | CS_TYPE_STRING))
- {
- char *s = arg_eval(parse, &val);
- if (s) result->n = strlen(s);
- }
- if (val.alloc) free(val.s);
- return STATUS_OK;
-}
-
-static NEOERR * _builtin_str_crc(CSPARSE *parse, CS_FUNCTION *csf, CSARG *args,
- CSARG *result)
-{
- NEOERR *err;
- CSARG val;
-
- memset(&val, 0, sizeof(val));
- err = eval_expr(parse, args, &val);
- if (err) return nerr_pass(err);
-
- /* non var/string objects have 0 length */
- result->op_type = CS_TYPE_NUM;
- result->n = 0;
-
- if (val.op_type & (CS_TYPE_VAR | CS_TYPE_STRING))
- {
- char *s = arg_eval(parse, &val);
- if (s) result->n = ne_crc((unsigned char *)s, strlen(s));
- }
- if (val.alloc) free(val.s);
- return STATUS_OK;
-}
-
-
-static NEOERR * _builtin_str_find(CSPARSE *parse, CS_FUNCTION *csf, CSARG *args, CSARG *result)
-{
- NEOERR *err;
- char *s = NULL;
- char *substr = NULL;
- char *pstr = NULL;
-
- result->op_type = CS_TYPE_NUM;
- result->n = -1;
-
- err = cs_arg_parse(parse, args, "ss", &s, &substr);
- if (err) return nerr_pass(err);
- /* If null arguments, return -1 index */
- if (s == NULL || substr == NULL) {
- if (s) free(s);
- if (substr) free(substr);
- return STATUS_OK;
- }
- pstr = strstr(s, substr);
- if (pstr != NULL) {
- result->n = (pstr - s) / sizeof(char);
- }
- free(s);
- free(substr);
- return STATUS_OK;
-}
-
-
-static NEOERR * _builtin_name(CSPARSE *parse, CS_FUNCTION *csf, CSARG *args, CSARG *result)
-{
- NEOERR *err;
- HDF *obj;
- CSARG val;
-
- memset(&val, 0, sizeof(val));
- err = eval_expr(parse, args, &val);
- if (err) return nerr_pass(err);
-
- result->op_type = CS_TYPE_STRING;
- result->s = "";
-
- if (val.op_type & CS_TYPE_VAR)
- {
- obj = var_lookup_obj (parse, val.s);
- if (obj != NULL)
- result->s = hdf_obj_name(obj);
- }
- else if (val.op_type & CS_TYPE_STRING)
- {
- result->s = val.s;
- result->alloc = val.alloc;
- val.alloc = 0;
- }
- if (val.alloc) free(val.s);
- return STATUS_OK;
-}
-
-/* Check to see if a local variable is the first in an each/loop sequence */
-static NEOERR * _builtin_first(CSPARSE *parse, CS_FUNCTION *csf, CSARG *args,
- CSARG *result)
-{
- NEOERR *err;
- CS_LOCAL_MAP *map;
- char *c;
- CSARG val;
-
- memset(&val, 0, sizeof(val));
- err = eval_expr(parse, args, &val);
- if (err) return nerr_pass(err);
-
- /* default is "not first" */
- result->op_type = CS_TYPE_NUM;
- result->n = 0;
-
- /* Only applies to possible local vars */
- if ((val.op_type & CS_TYPE_VAR) && !strchr(val.s, '.'))
- {
- map = lookup_map (parse, val.s, &c);
- if (map && map->first)
- result->n = 1;
- }
- if (val.alloc) free(val.s);
- return STATUS_OK;
-}
-
-/* Check to see if a local variable is the last in an each/loop sequence */
-/* TODO: consider making this work on regular HDF vars */
-static NEOERR * _builtin_last(CSPARSE *parse, CS_FUNCTION *csf, CSARG *args,
- CSARG *result)
-{
- NEOERR *err;
- CS_LOCAL_MAP *map;
- char *c;
- CSARG val;
-
- memset(&val, 0, sizeof(val));
- err = eval_expr(parse, args, &val);
- if (err) return nerr_pass(err);
-
- /* default is "not last" */
- result->op_type = CS_TYPE_NUM;
- result->n = 0;
-
- /* Only applies to possible local vars */
- if ((val.op_type & CS_TYPE_VAR) && !strchr(val.s, '.'))
- {
- map = lookup_map (parse, val.s, &c);
- if (map) {
- if (map->last) {
- result->n = 1;
- } else if (map->type == CS_TYPE_VAR) {
- if (hdf_obj_next(map->h) == NULL) {
- result->n = 1;
- }
- }
- }
- }
- if (val.alloc) free(val.s);
- return STATUS_OK;
-}
-
-/* returns the absolute value (ie, positive) of a number */
-static NEOERR * _builtin_abs (CSPARSE *parse, CS_FUNCTION *csf, CSARG *args,
- CSARG *result)
-{
- NEOERR *err;
- int n1 = 0;
- CSARG val;
-
- memset(&val, 0, sizeof(val));
- err = eval_expr(parse, args, &val);
- if (err) return nerr_pass(err);
-
- result->op_type = CS_TYPE_NUM;
- n1 = arg_eval_num(parse, &val);
- result->n = abs(n1);
-
- if (val.alloc) free(val.s);
- return STATUS_OK;
-}
-
-/* returns the larger or two integers */
-static NEOERR * _builtin_max (CSPARSE *parse, CS_FUNCTION *csf, CSARG *args,
- CSARG *result)
-{
- NEOERR *err;
- long int n1 = 0;
- long int n2 = 0;
-
- result->op_type = CS_TYPE_NUM;
- result->n = 0;
-
- err = cs_arg_parse(parse, args, "ii", &n1, &n2);
- if (err) return nerr_pass(err);
- result->n = (n1 > n2) ? n1 : n2;
-
- return STATUS_OK;
-}
-
-/* returns the smaller or two integers */
-static NEOERR * _builtin_min (CSPARSE *parse, CS_FUNCTION *csf, CSARG *args,
- CSARG *result)
-{
- NEOERR *err;
- long int n1 = 0;
- long int n2 = 0;
-
- result->op_type = CS_TYPE_NUM;
- result->n = 0;
-
- err = cs_arg_parse(parse, args, "ii", &n1, &n2);
- if (err) return nerr_pass(err);
- result->n = (n1 < n2) ? n1 : n2;
-
- return STATUS_OK;
-}
-
-static NEOERR * _builtin_str_slice (CSPARSE *parse, CS_FUNCTION *csf, CSARG *args, CSARG *result)
-{
- NEOERR *err;
- char *s = NULL;
- char *slice;
- long int b = 0;
- long int e = 0;
- size_t len;
-
- result->op_type = CS_TYPE_STRING;
- result->s = "";
-
- err = cs_arg_parse(parse, args, "sii", &s, &b, &e);
- if (err) return nerr_pass(err);
- /* If null, return empty string */
- if (s == NULL) return STATUS_OK;
- len = strlen(s);
- if (b < 0 && e == 0) e = len;
- if (b < 0) b += len;
- if (e < 0) e += len;
- if (e > len) e = len;
- /* Its the whole string */
- if (b == 0 && e == len)
- {
- result->s = s;
- result->alloc = 1;
- return STATUS_OK;
- }
- if (e < b) b = e;
- if (b == e)
- {
- /* If null, return empty string */
- free(s);
- return STATUS_OK;
- }
- slice = (char *) malloc (sizeof(char) * (e-b+1));
- if (slice == NULL)
- return nerr_raise(NERR_NOMEM, "Unable to allocate memory for string slice");
- strncpy(slice, s + b, e-b);
- free(s);
- slice[e-b] = '\0';
-
- result->s = slice;
- result->alloc = 1;
-
- return STATUS_OK;
-}
-
-#ifdef ENABLE_GETTEXT
-static NEOERR * _builtin_gettext(CSPARSE *parse, CS_FUNCTION *csf, CSARG *args, CSARG *result)
-{
- NEOERR *err;
- char *s;
- CSARG val;
-
- memset(&val, 0, sizeof(val));
- err = eval_expr(parse, args, &val);
- if (err) return nerr_pass(err);
-
- result->op_type = CS_TYPE_STRING;
- result->s = "";
-
- if (val.op_type & (CS_TYPE_VAR | CS_TYPE_STRING))
- {
- s = arg_eval(parse, &val);
- if (s)
- {
- result->s = gettext(s);
- }
- }
- if (val.alloc) free(val.s);
- return STATUS_OK;
-}
-#endif
-
-static NEOERR * _str_func_wrapper (CSPARSE *parse, CS_FUNCTION *csf, CSARG *args, CSARG *result)
-{
- NEOERR *err;
- char *s;
- CSARG val;
-
- memset(&val, 0, sizeof(val));
- err = eval_expr(parse, args, &val);
- if (err) return nerr_pass(err);
-
- if (val.op_type & (CS_TYPE_VAR | CS_TYPE_STRING))
- {
- result->op_type = CS_TYPE_STRING;
- result->n = 0;
-
- s = arg_eval(parse, &val);
- if (s)
- {
- err = csf->str_func(s, &(result->s));
- if (err) return nerr_pass(err);
- result->alloc = 1;
- }
- }
- else
- {
- result->op_type = val.op_type;
- result->n = val.n;
- result->s = val.s;
- result->alloc = val.alloc;
- val.alloc = 0;
- }
- if (val.alloc) free(val.s);
- return STATUS_OK;
-}
-
-NEOERR *cs_register_strfunc(CSPARSE *parse, char *funcname, CSSTRFUNC str_func)
-{
- NEOERR *err;
-
- err = cs_register_function(parse, funcname, 1, _str_func_wrapper);
- if (err) return nerr_pass(err);
- parse->functions->str_func = str_func;
-
- return STATUS_OK;
-}
-
-NEOERR *cs_register_esc_strfunc(CSPARSE *parse, char *funcname,
- CSSTRFUNC str_func)
-{
- NEOERR *err;
-
- err = cs_register_strfunc(parse, funcname, str_func);
- if (err) return nerr_pass(err);
- parse->functions->escape = NEOS_ESCAPE_FUNCTION;
-
- return STATUS_OK;
-}
-
-/* **** CS Initialize/Destroy ************************************ */
-NEOERR *cs_init (CSPARSE **parse, HDF *hdf) {
- return nerr_pass(cs_init_internal(parse, hdf, NULL));
-}
-
-static NEOERR *cs_init_internal (CSPARSE **parse, HDF *hdf, CSPARSE *parent)
-{
- NEOERR *err = STATUS_OK;
- CSPARSE *my_parse;
- STACK_ENTRY *entry;
- char *esc_value;
- CS_ESCAPE_MODES *esc_cursor;
-
- err = nerr_init();
- if (err != STATUS_OK) return nerr_pass (err);
-
- my_parse = (CSPARSE *) calloc (1, sizeof (CSPARSE));
- if (my_parse == NULL)
- return nerr_raise (NERR_NOMEM, "Unable to allocate memory for CSPARSE");
-
- err = uListInit (&(my_parse->stack), 10, 0);
- if (err != STATUS_OK)
- {
- free(my_parse);
- return nerr_pass(err);
- }
- err = uListInit (&(my_parse->alloc), 10, 0);
- if (err != STATUS_OK)
- {
- free(my_parse);
- return nerr_pass(err);
- }
- err = alloc_node (&(my_parse->tree), my_parse);
- if (err != STATUS_OK)
- {
- cs_destroy (&my_parse);
- return nerr_pass(err);
- }
- my_parse->current = my_parse->tree;
- my_parse->next = &(my_parse->current->next);
-
- entry = (STACK_ENTRY *) calloc (1, sizeof (STACK_ENTRY));
- if (entry == NULL)
- {
- cs_destroy (&my_parse);
- return nerr_raise (NERR_NOMEM,
- "Unable to allocate memory for stack entry");
- }
- entry->state = ST_GLOBAL;
- entry->tree = my_parse->current;
- entry->location = 0;
- entry->escape = NEOS_ESCAPE_NONE;
- err = uListAppend(my_parse->stack, entry);
- if (err != STATUS_OK) {
- free (entry);
- cs_destroy(&my_parse);
- return nerr_pass(err);
- }
- my_parse->tag = hdf_get_value(hdf, "Config.TagStart", "cs");
- my_parse->taglen = strlen(my_parse->tag);
- my_parse->hdf = hdf;
-
- /* Let's set the default escape data */
- my_parse->escaping.global_ctx = NEOS_ESCAPE_NONE;
- my_parse->escaping.next_stack = NEOS_ESCAPE_NONE;
- my_parse->escaping.when_undef = NEOS_ESCAPE_NONE;
-
- /* See CS_ESCAPE_MODES. 0 is "none" */
- esc_value = hdf_get_value(hdf, "Config.VarEscapeMode", EscapeModes[0].mode);
- /* Let's ensure the specified escape mode is valid and proceed */
- for (esc_cursor = &EscapeModes[0];
- esc_cursor->mode != NULL;
- esc_cursor++)
- if (!strcmp(esc_value, esc_cursor->mode))
- {
- my_parse->escaping.global_ctx = esc_cursor->context;
- my_parse->escaping.next_stack = esc_cursor->context;
- entry->escape = esc_cursor->context;
- break;
- }
- /* Didn't find an acceptable value we were looking for */
- if (esc_cursor->mode == NULL) {
- cs_destroy (&my_parse);
- return nerr_raise (NERR_OUTOFRANGE,
- "Invalid HDF value for Config.VarEscapeMode (none,html,js,url): %s",
- esc_value);
- }
-
- /* Read configuration value to determine whether to enable audit mode */
- my_parse->audit_mode = hdf_get_int_value(hdf, "Config.EnableAuditMode", 0);
-
- my_parse->err_list = NULL;
-
- if (parent == NULL)
- {
- static struct _builtin_functions {
- const char *name;
- int nargs;
- CSFUNCTION function;
- } Builtins[] = {
- { "len", 1, _builtin_subcount },
- { "subcount", 1, _builtin_subcount },
- { "name", 1, _builtin_name },
- { "first", 1, _builtin_first },
- { "last", 1, _builtin_last },
- { "abs", 1, _builtin_abs },
- { "max", 2, _builtin_max },
- { "min", 2, _builtin_min },
- { "string.find", 2, _builtin_str_find },
- { "string.slice", 3, _builtin_str_slice },
- { "string.length", 1, _builtin_str_length },
- { "string.crc", 1, _builtin_str_crc},
-#ifdef ENABLE_GETTEXT
- { "_", 1, _builtin_gettext },
-#endif
- { NULL, 0, NULL },
- };
- int x = 0;
- while (Builtins[x].name != NULL) {
- err = cs_register_function(my_parse, Builtins[x].name, Builtins[x].nargs,
- Builtins[x].function);
- if (err)
- {
- cs_destroy(&my_parse);
- return nerr_pass(err);
- }
- x++;
- }
- /* Set global_hdf to be null */
- my_parse->global_hdf = NULL;
- my_parse->parent = NULL;
- }
- else
- {
- /* TODO: macros and functions should actually not be duplicated, they
- * should just be modified in lookup to walk the CS struct hierarchy we're
- * creating here */
- /* BUG: We currently can't copy the macros because they reference the parse
- * tree, so if this sub-parse tree adds a macro, the macro reference will
- * persist, but the parse tree it points to will be gone when the sub-parse
- * is gone. */
- my_parse->functions = parent->functions;
- my_parse->global_hdf = parent->global_hdf;
- my_parse->fileload = parent->fileload;
- my_parse->fileload_ctx = parent->fileload_ctx;
- // This should be safe since locals handling is done entirely local to the
- // eval functions, not globally by the parse handling. This should
- // pass the locals down to the new parse context to make locals work with
- // lvar
- my_parse->locals = parent->locals;
- my_parse->parent = parent;
-
- /* Copy the audit flag from parent */
- my_parse->audit_mode = parent->audit_mode;
- }
-
- *parse = my_parse;
- return STATUS_OK;
-}
-
-void cs_register_fileload(CSPARSE *parse, void *ctx, CSFILELOAD fileload) {
- if (parse != NULL) {
- parse->fileload_ctx = ctx;
- parse->fileload = fileload;
- }
-}
-
-void cs_destroy (CSPARSE **parse)
-{
- CSPARSE *my_parse = *parse;
-
- if (my_parse == NULL)
- return;
-
- uListDestroy (&(my_parse->stack), ULIST_FREE);
- uListDestroy (&(my_parse->alloc), ULIST_FREE);
-
- dealloc_macro(&my_parse->macros);
- dealloc_node(&(my_parse->tree));
- if (my_parse->parent == NULL) {
- dealloc_function(&(my_parse->functions));
- }
-
- /* Free list of errors */
- if (my_parse->err_list != NULL) {
- CS_ERROR *ptr;
-
- while (my_parse->err_list) {
- ptr = my_parse->err_list->next;
- free(my_parse->err_list->err);
- free(my_parse->err_list);
- my_parse->err_list = ptr;
- }
- }
-
- free(my_parse);
- *parse = NULL;
-}
-
-/* **** CS Debug Dumps ******************************************** */
-static NEOERR *dump_node (CSPARSE *parse, CSTREE *node, int depth, void *ctx,
- CSOUTFUNC cb, char *buf, int blen)
-{
- NEOERR *err;
-
- while (node != NULL)
- {
- snprintf (buf, blen, "%*s %s ", depth, "", Commands[node->cmd].cmd);
- err = cb (ctx, buf);
- if (err) return nerr_pass (err);
- if (node->cmd)
- {
- if (node->arg1.op_type)
- {
- if (node->arg1.op_type == CS_TYPE_NUM)
- {
- snprintf (buf, blen, "%ld ", node->arg1.n);
- }
- else if (node->arg1.op_type == CS_TYPE_MACRO)
- {
- snprintf (buf, blen, "%s ", node->arg1.macro->name);
- }
- else
- {
- snprintf (buf, blen, "%s ", node->arg1.s);
- }
- err = cb (ctx, buf);
- if (err) return nerr_pass (err);
- }
- if (node->arg2.op_type)
- {
- if (node->arg2.op_type == CS_TYPE_NUM)
- {
- snprintf (buf, blen, "%ld", node->arg2.n);
- }
- else
- {
- snprintf (buf, blen, "%s", node->arg2.s);
- }
- err = cb (ctx, buf);
- if (err) return nerr_pass (err);
- }
- if (node->vargs)
- {
- CSARG *arg;
- arg = node->vargs;
- while (arg)
- {
- if (arg->op_type == CS_TYPE_NUM)
- {
- snprintf (buf, blen, "%ld ", arg->n);
- }
- else
- {
- snprintf (buf, blen, "%s ", arg->s);
- }
- err = cb (ctx, buf);
- if (err) return nerr_pass (err);
- arg = arg->next;
- }
- }
- }
- err = cb (ctx, "\n");
- if (err) return nerr_pass (err);
- if (node->case_0)
- {
- snprintf (buf, blen, "%*s %s\n", depth, "", "Case 0");
- err = cb (ctx, buf);
- if (err) return nerr_pass (err);
- err = dump_node (parse, node->case_0, depth+1, ctx, cb, buf, blen);
- if (err) return nerr_pass (err);
- }
- if (node->case_1)
- {
- snprintf (buf, blen, "%*s %s\n", depth, "", "Case 1");
- err = cb (ctx, buf);
- if (err) return nerr_pass (err);
- err = dump_node (parse, node->case_1, depth+1, ctx, cb, buf, blen);
- if (err) return nerr_pass (err);
- }
- node = node->next;
- }
- return STATUS_OK;
-}
-
-NEOERR *cs_dump (CSPARSE *parse, void *ctx, CSOUTFUNC cb)
-{
- CSTREE *node;
- char buf[4096];
-
- if (parse->tree == NULL)
- return nerr_raise (NERR_ASSERT, "No parse tree exists");
-
- node = parse->tree;
- return nerr_pass (dump_node (parse, node, 0, ctx, cb, buf, sizeof(buf)));
-}
-
-#if 0
-static char *node_name (CSTREE *node)
-{
- static char buf[256];
-
- if (node == NULL)
- snprintf (buf, sizeof(buf), "NULL");
- else
- snprintf (buf, sizeof(buf), "%s_%08x", Commands[node->cmd].cmd,
- node->node_num);
-
- return buf;
-}
-
-static NEOERR *dump_node_pre_c (CSPARSE *parse, CSTREE *node, FILE *fp)
-{
- NEOERR *err;
-
- while (node != NULL)
- {
- fprintf (fp, "CSTREE %s;\n", node_name(node));
- if (node->case_0)
- {
- err = dump_node_pre_c (parse, node->case_0, fp);
- if (err != STATUS_OK) nerr_pass (err);
- }
- if (node->case_1)
- {
- err = dump_node_pre_c (parse, node->case_1, fp);
- if (err != STATUS_OK) nerr_pass (err);
- }
- node = node->next;
- }
- return STATUS_OK;
-}
-
-static NEOERR *dump_node_c (CSPARSE *parse, CSTREE *node, FILE *fp)
-{
- NEOERR *err;
- char *s;
-
- while (node != NULL)
- {
- fprintf (fp, "CSTREE %s =\n\t{%d, %d, %d, ", node_name(node), node->node_num,
- node->cmd, node->flags);
- s = repr_string_alloc (node->arg1.s);
- if (s == NULL)
- return nerr_raise(NERR_NOMEM, "Unable to allocate space for repr");
- fprintf (fp, "\n\t { %d, %s, %ld }, ", node->arg1.op_type, s, node->arg1.n);
- free(s);
- s = repr_string_alloc (node->arg2.s);
- if (s == NULL)
- return nerr_raise(NERR_NOMEM, "Unable to allocate space for repr");
- fprintf (fp, "\n\t { %d, %s, %ld }, ", node->arg2.op_type, s, node->arg2.n);
- free(s);
- if (node->case_0)
- fprintf (fp, "\n\t%d, &%s, ", node->op, node_name(node->case_0));
- else
- fprintf (fp, "\n\t%d, NULL, ", node->op);
- if (node->case_1)
- fprintf (fp, "&%s, ", node_name(node->case_1));
- else
- fprintf (fp, "NULL, ");
- if (node->next)
- fprintf (fp, "&%s};\n\n", node_name(node->next));
- else
- fprintf (fp, "NULL};\n\n");
- if (node->case_0)
- {
- err = dump_node_c (parse, node->case_0, fp);
- if (err != STATUS_OK) nerr_pass (err);
- }
- if (node->case_1)
- {
- err = dump_node_c (parse, node->case_1, fp);
- if (err != STATUS_OK) nerr_pass (err);
- }
- node = node->next;
- }
- return STATUS_OK;
-}
-
-NEOERR *cs_dump_c (CSPARSE *parse, char *path)
-{
- CSTREE *node;
- FILE *fp;
- NEOERR *err;
-
- if (parse->tree == NULL)
- return nerr_raise (NERR_ASSERT, "No parse tree exists");
-
- fp = fopen(path, "w");
- if (fp == NULL)
- {
- return nerr_raise (NERR_SYSTEM,
- "Unable to open file %s for writing: [%d] %s", path, errno,
- strerror(errno));
- }
-
- fprintf(fp, "/* Auto-generated file: DO NOT EDIT */\n");
- fprintf(fp, "#include <stdlib.h>\n\n");
- fprintf(fp, "#include \"cs.h\"\n");
- node = parse->tree;
- err = dump_node_pre_c (parse, node, fp);
- fprintf(fp, "\n");
- err = dump_node_c (parse, node, fp);
- fclose(fp);
- return nerr_pass (err);
-}
-#endif
diff --git a/cs/cstest.c b/cs/cstest.c
deleted file mode 100644
index 9005ecc..0000000
--- a/cs/cstest.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#include "cs_config.h"
-
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include "util/neo_misc.h"
-#include "util/neo_hdf.h"
-#include "cs.h"
-
-static NEOERR *output (void *ctx, char *s)
-{
- printf ("%s", s);
- return STATUS_OK;
-}
-
-NEOERR *test_strfunc(const char *str, char **ret)
-{
- char *s = strdup(str);
- int x = 0;
-
- if (s == NULL)
- return nerr_raise(NERR_NOMEM, "Unable to duplicate string in test_strfunc");
-
- while (s[x]) {
- s[x] = tolower(s[x]);
- x++;
- }
- *ret = s;
- return STATUS_OK;
-}
-
-
-int main (int argc, char *argv[])
-{
- NEOERR *err;
- CSPARSE *parse;
- HDF *hdf;
- int verbose = 0;
- char *hdf_file, *cs_file;
-
- if (argc < 3)
- {
- ne_warn ("Usage: cstest [-v] <file.hdf> <file.cs>");
- return -1;
- }
-
- if (!strcmp(argv[1], "-v"))
- {
- verbose = 1;
- if (argc < 4)
- {
- ne_warn ("Usage: cstest [-v] <file.hdf> <file.cs>");
- return -1;
- }
- hdf_file = argv[2];
- cs_file = argv[3];
- }
- else
- {
- hdf_file = argv[1];
- cs_file = argv[2];
- }
-
- err = hdf_init(&hdf);
- if (err != STATUS_OK)
- {
- nerr_log_error(err);
- return -1;
- }
- err = hdf_read_file(hdf, hdf_file);
- if (err != STATUS_OK)
- {
- nerr_log_error(err);
- return -1;
- }
-
- printf ("Parsing %s\n", cs_file);
- err = cs_init (&parse, hdf);
- if (err != STATUS_OK)
- {
- nerr_log_error(err);
- return -1;
- }
-
- /* register a test strfunc */
- err = cs_register_strfunc(parse, "test_strfunc", test_strfunc);
- if (err != STATUS_OK)
- {
- nerr_log_error(err);
- return -1;
- }
-
- err = cs_parse_file (parse, cs_file);
- if (err != STATUS_OK)
- {
- err = nerr_pass(err);
- nerr_log_error(err);
- return -1;
- }
-
- err = cs_render(parse, NULL, output);
- if (err != STATUS_OK)
- {
- err = nerr_pass(err);
- nerr_log_error(err);
- return -1;
- }
-
- if (verbose)
- {
- printf ("\n-----------------------\nCS DUMP\n");
- err = cs_dump(parse, NULL, output);
- }
-
- cs_destroy (&parse);
-
- if (verbose)
- {
- printf ("\n-----------------------\nHDF DUMP\n");
- hdf_dump (hdf, NULL);
- }
- hdf_destroy(&hdf);
-
-
- return 0;
-}
diff --git a/cs/test.cs b/cs/test.cs
deleted file mode 100644
index f01ff42..0000000
--- a/cs/test.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-
-Start of File
-
-<?cs if:Blah == "wow" ?>
- Blah == wow
-<?cs else ?>
- Blah != wow
-<?cs /if ?>
-
-
-<?cs if:!#0 ?>
-
-<?cs if:arg1 ?>
-wow (true)
-<?cs else ?>
-other (false)
-<?cs /if ?>
-
-<?cs if:#5 ?>
- This is True
-<?cs /if ?>
-
-<?cs if:Blah == Foo ?>
-<?cs /if ?>
-
-<?cs if:Blah < #5 ?>
- <?cs var:Blah ?>
-<?cs /if ?>
-
-<?cs include!"test2.cs" ?>
-<?cs linclude!"test2.cs" ?>
-
-<?cs include!"test_escape.cs" ?>
-<?cs escape: "html" ?><?cs call:echo_all(Title+BlahJs:UrlArg) ?><?cs /escape ?>
-
-<?cs each: x=Foo.Bar.Baz ?>
- x = <?cs var:x ?>
- x.num = <?cs var:x.num ?>
-
-<?cs if:#1 ?>
- This is True.
-<?cs /if ?>
-wow
-<?cs /each ?>
-<?cs /if ?>
-
-<?cs if:#Wow.Foo ?>
- This is False.
-<?cs /if ?>
-
-<?cs each:x=Outside ?>
- Outside <?cs name:x ?>
- <?cs each:y=x.Inside ?>
- Inside = <?cs var:y ?>
- <?cs /each ?>
-<?cs /each ?>
-
-<?cs if:TestIf == "0" ?>
- TestIf == 0
-<?cs elif:TestIf == "1" ?>
- <?cs var:TestIf ?>
- TestIf == 1
-<?cs else ?>
- TestIf == else
-<?cs /if ?>
-
-<?cs if:"1" == "1" ?>
-Correct, "1" == "1"
-<?cs else ?>
-WRONG, "1" != "1"
-<?cs /if ?>
-
-<?cs # This is a ClearSilver Comment ?>
-
-between comments
-
-<?cs ##########################################################
- # A multi-line
- # comment
-?>
-
-More?
diff --git a/cs/test.cs.gold b/cs/test.cs.gold
deleted file mode 100644
index 1254e30..0000000
--- a/cs/test.cs.gold
+++ /dev/null
@@ -1,212 +0,0 @@
-Parsing test.cs
-
-Start of File
-
-
- Blah == wow
-
-
-
-
-
-
-wow (true)
-
-
-
- This is True
-
-
-
-
-
- wow
-
-
-
-I'm in test2.cs
-
-
-wow2
-
-
-I'm in test2.cs
-
-
-wow2
-
-
-escape: not used
-UrlArg: Secret Password~!@#$%^&*()+=-_|\[]{}:";'<>,.?
-BlahJs: quote ' backslash \ semicolon ; end tag </script>
-Title: </title><script>alert(1)</script>
-
-
-escape: none
-UrlArg: Secret Password~!@#$%^&*()+=-_|\[]{}:";'<>,.?
-BlahJs: quote ' backslash \ semicolon ; end tag </script>
-Title: </title><script>alert(1)</script>
-
-
-
-escape: html
-UrlArg: Secret Password~!@#$%^&amp;*()+=-_|\[]{}:&quot;;&#39;&lt;&gt;,.?
-BlahJs: quote &#39; backslash \ semicolon ; end tag &lt;/script&gt;
-Title: &lt;/title&gt;&lt;script&gt;alert(1)&lt;/script&gt;
-
-
-
-escape: js
-UrlArg: Secret Password~!@#$%^\x26*()+=-_|\x5C[]{}:\x22\x3B\x27\x3C\x3E,.?
-BlahJs: quote \x27 backslash \x5C semicolon \x3B end tag \x3C\x2Fscript\x3E
-Title: \x3C\x2Ftitle\x3E\x3Cscript\x3Ealert(1)\x3C\x2Fscript\x3E
-
-
-
-escape: url
-UrlArg: Secret+Password%7E!%40%23%24%25%5E%26*()%2B%3D-_%7C%5C%5B%5D%7B%7D%3A%22%3B%27%3C%3E%2C.%3F
-BlahJs: quote+%27+backslash+%5C+semicolon+%3B+end+tag+%3C%2Fscript%3E
-Title: %3C%2Ftitle%3E%3Cscript%3Ealert(1)%3C%2Fscript%3E
-
-
-
-Nested escaping: html
-The internal calls should take precedence
-url -> UrlArg: Secret+Password%7E!%40%23%24%25%5E%26*()%2B%3D-_%7C%5C%5B%5D%7B%7D%3A%22%3B%27%3C%3E%2C.%3F
-js -> BlahJs: quote \x27 backslash \x5C semicolon \x3B end tag \x3C\x2Fscript\x3E
-html -> Title: &lt;/title&gt;&lt;script&gt;alert(1)&lt;/script&gt;
-
-
-Defining the macro echo_all inside of a "html" escape.
-
-
-Calling echo_all() macro:
-
-not used: </title><script>alert(1)</script>quote ' backslash \ semicolon ; end tag </script>
-none: </title><script>alert(1)</script>quote ' backslash \ semicolon ; end tag </script>
-url: %3C%2Ftitle%3E%3Cscript%3Ealert(1)%3C%2Fscript%3Equote+%27+backslash+%5C+semicolon+%3B+end+tag+%3C%2Fscript%3E
-js: \x3C\x2Ftitle\x3E\x3Cscript\x3Ealert(1)\x3C\x2Fscript\x3Equote \x27 backslash \x5C semicolon \x3B end tag \x3C\x2Fscript\x3E
-html: &lt;/title&gt;&lt;script&gt;alert(1)&lt;/script&gt;quote &#39; backslash \ semicolon ; end tag &lt;/script&gt;
-
-
-
-Calling echo_all() macro from within "html":
-
-not used: &lt;/title&gt;&lt;script&gt;alert(1)&lt;/script&gt;quote &#39; backslash \ semicolon ; end tag &lt;/script&gt;
-none: </title><script>alert(1)</script>quote ' backslash \ semicolon ; end tag </script>
-url: %3C%2Ftitle%3E%3Cscript%3Ealert(1)%3C%2Fscript%3Equote+%27+backslash+%5C+semicolon+%3B+end+tag+%3C%2Fscript%3E
-js: \x3C\x2Ftitle\x3E\x3Cscript\x3Ealert(1)\x3C\x2Fscript\x3Equote \x27 backslash \x5C semicolon \x3B end tag \x3C\x2Fscript\x3E
-html: &lt;/title&gt;&lt;script&gt;alert(1)&lt;/script&gt;quote &#39; backslash \ semicolon ; end tag &lt;/script&gt;
-
-
-
-
-Calling echo_all() macro from within "js":
-
-not used: \x3C\x2Ftitle\x3E\x3Cscript\x3Ealert(1)\x3C\x2Fscript\x3Equote \x27 backslash \x5C semicolon \x3B end tag \x3C\x2Fscript\x3E
-none: </title><script>alert(1)</script>quote ' backslash \ semicolon ; end tag </script>
-url: %3C%2Ftitle%3E%3Cscript%3Ealert(1)%3C%2Fscript%3Equote+%27+backslash+%5C+semicolon+%3B+end+tag+%3C%2Fscript%3E
-js: \x3C\x2Ftitle\x3E\x3Cscript\x3Ealert(1)\x3C\x2Fscript\x3Equote \x27 backslash \x5C semicolon \x3B end tag \x3C\x2Fscript\x3E
-html: &lt;/title&gt;&lt;script&gt;alert(1)&lt;/script&gt;quote &#39; backslash \ semicolon ; end tag &lt;/script&gt;
-
-
-
-
-Calling echo_all() macro from within "url":
-
-not used: %3C%2Ftitle%3E%3Cscript%3Ealert(1)%3C%2Fscript%3Equote+%27+backslash+%5C+semicolon+%3B+end+tag+%3C%2Fscript%3E
-none: </title><script>alert(1)</script>quote ' backslash \ semicolon ; end tag </script>
-url: %3C%2Ftitle%3E%3Cscript%3Ealert(1)%3C%2Fscript%3Equote+%27+backslash+%5C+semicolon+%3B+end+tag+%3C%2Fscript%3E
-js: \x3C\x2Ftitle\x3E\x3Cscript\x3Ealert(1)\x3C\x2Fscript\x3Equote \x27 backslash \x5C semicolon \x3B end tag \x3C\x2Fscript\x3E
-html: &lt;/title&gt;&lt;script&gt;alert(1)&lt;/script&gt;quote &#39; backslash \ semicolon ; end tag &lt;/script&gt;
-
-
-
-
-not used: &lt;/title&gt;&lt;script&gt;alert(1)&lt;/script&gt;
-none: </title><script>alert(1)</script>
-url: %3C%2Ftitle%3E%3Cscript%3Ealert(1)%3C%2Fscript%3E
-js: \x3C\x2Ftitle\x3E\x3Cscript\x3Ealert(1)\x3C\x2Fscript\x3E
-html: &lt;/title&gt;&lt;script&gt;alert(1)&lt;/script&gt;
-
-
-
- x = zero
- x.num = #0
-
-
- This is True.
-
-wow
-
- x = one
- x.num =
-
-
- This is True.
-
-wow
-
- x = two
- x.num = #2
-
-
- This is True.
-
-wow
-
- x = three
- x.num =
-
-
- This is True.
-
-wow
-
-
-
-
- This is False.
-
-
-
- Outside 0
-
- Inside = 0
-
- Inside = 1
-
-
- Outside 1
-
- Inside = 2
-
- Inside = 3
-
-
- Outside 2
-
- Inside = 2
-
- Inside = 3
-
-
- Outside 3
-
-
-
-
- TestIf == 0
-
-
-
-Correct, "1" == "1"
-
-
-
-
-between comments
-
-
-
-More?
diff --git a/cs/test.hdf b/cs/test.hdf
deleted file mode 100644
index 667a855..0000000
--- a/cs/test.hdf
+++ /dev/null
@@ -1,151 +0,0 @@
-
-Config.VarEscapeMode = none
-arg1 = 1
-var =
-
-Empty =
-
-
-Numbers {
- hdf9 = 9
- hdf14 = 14
-}
-
-Blah = wow
-BlahJs = quote ' backslash \ semicolon ; end tag </script>
-Title = </title><script>alert(1)</script>
-UrlArg = Secret Password~!@#$%^&*()+=-_|\[]{}:";'<>,.?
-Foo = Worn Out
-
-Foo.Bar.Baz {
- 0 = zero
- 0.num = #0
- 1 = one
- 2 = two
- 2.num = #2
- 3 = three
-}
-
-Wow.Foo = 3
-
-Outside {
- 0 {
- Inside {
- 0 = 0
- 1 = 1
- }
- }
- 1 {
- Inside {
- 2 = 2
- 3 = 3
- }
- }
- 2 : Outside.1
- 3 {
- }
-}
-
-TestIf = 0
-
-Days {
- 0 = 0
- 0.Abbr = Mon
- 1 = 1
- 1.Abbr = Tues
- 2 = 2
- 2.Abbr = Wed
- 3 = 3
- 3.Abbr = Thur
- 4 = 4
- 4.Abbr = Fri
- 5 = 5
- 5.Abbr = Sat
- 6 = 6
- 6.Abbr = Sun
-}
-
-Neg = -1
-
-My.Test : Days.0.Abbr
-My.Test2 : Days.0
-
-Color = #fffff
-
-CGI.box.msgs {
- 0 {
- ticket_id = 1
- }
- 1 {
- ticket_id = 2
- }
- 2 {
- ticket_id = 3
- }
-}
-
-Query.boxid = 2
-Query.split = 1
-Query.filter = 0
-Query.sort = t
-Query.sort_dir = u
-CGI.box.cur.min_box_idx = 1
-
-
-Files.0.Name = Desktop
-Files.0.Type = dir
-Files.0.Sub.0.Name = Bookmarks.html
-Files.0.Sub.0.Type = file
-Files.0.Sub.1.Name = History.txt
-Files.0.Sub.1.Type = file
-Files.0.Sub.2.Name = Resume.doc
-Files.0.Sub.2.Type = file
-Files.0.Sub.3.Name = Favorites
-Files.0.Sub.3.Type = dir
-Files.0.Sub.3.Sub.0.Name = foo
-Files.0.Sub.3.Sub.0.Type = file
-Files.0.Sub.3.Sub.1.Name = bar
-Files.0.Sub.3.Sub.1.Type = file
-Files.0.Sub.3.Sub.2.Name = boo
-Files.0.Sub.3.Sub.2.Type = file
-Files.0.Sub.3.Sub.3.Name = baz
-Files.0.Sub.3.Sub.3.Type = file
-Files.0.Sub.3.Sub.4.Name = faq
-Files.0.Sub.3.Sub.4.Type = file
-Files.0.Sub.3.Sub.5.Name = far
-Files.0.Sub.3.Sub.5.Type = file
-Files.1.Name = .cshrc
-Files.1.Type = file
-Files.2.Name = .login
-Files.2.Type = file
-Files.2.Name = Mail
-Files.2.Type = dir
-Files.2.Sub.0.Name = inbox
-Files.2.Sub.0.Type = file
-Files.2.Sub.1.Name = received
-Files.2.Sub.1.Type = file
-Files.2.Sub.2.Name = sent
-Files.2.Sub.2.Type = file
-Files.2.Sub.2.Name = postponed
-Files.2.Sub.2.Type = file
-
-
-EvarTests {
- 0 = <?cs alt:Foo ?>ERROR<?cs /alt ?>
- 1 = test1
- 2 = test 2 <?cs var:Blah ?>
-}
-
-CS_START = <?cs
-CS_END = ?>
-
-A = HELLO
-B = WORLD
-C = <?cs var:A ?>/<?cs var:B ?>
-
-Biz.Address2 = addr
-parent_id = -1
-faq.topic_id = 1
-Query.topic = -1
-
-faq.sub_topic_id = -1
diff --git a/cs/test10.cs b/cs/test10.cs
deleted file mode 100644
index 06c2f7a..0000000
--- a/cs/test10.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-test new alt tag
-
-<?cs alt:#0 ?>
-this should always display [1]
-<?cs /alt ?>
-
-<?cs alt:"this should display [2]" ?>
-ERROR: this shouldn't display (static string)
-<?cs /alt ?>
-
-<?cs alt:#1 ?>
-ERROR: this should never display (#1)
-<?cs /alt ?>
-
-<?cs var:Foo.Bar.Baz.0 ?>
-<?cs alt:Foo.Bar.Baz.0 ?>
-ERROR: this should never display (Foo.Bar.Baz.0 exists)
-<?cs /alt ?>
-
-<?cs alt:MyDadday ?>
-This should display [3]
-<?cs /alt ?>
diff --git a/cs/test10.cs.gold b/cs/test10.cs.gold
deleted file mode 100644
index c4fdd27..0000000
--- a/cs/test10.cs.gold
+++ /dev/null
@@ -1,17 +0,0 @@
-Parsing test10.cs
-test new alt tag
-
-
-this should always display [1]
-
-
-this should display [2]
-
-1
-
-zero
-zero
-
-
-This should display [3]
-
diff --git a/cs/test11.cs b/cs/test11.cs
deleted file mode 100644
index 211de96..0000000
--- a/cs/test11.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-
-testing parenthesis for order of operations
-
-<?cs var:#5 * (#4 + #3) + #5 ?> == 40
-<?cs var:(#4 + #3) ?> == 7
-<?cs var:#4 + #3 * #5 ?> == 19
-<?cs var:(#4 + #3) * #5 ?> == 35
-<?cs var:((#4 + #3) * #5) + #5 ?> == 40
-<?cs var:#5 + ((#4 + #3) * #5) ?> == 40
-<?cs var:(#4 + #5) * (#3 + #6) ?> == 81
-<?cs var:#6 + #5 * (#5 + #3) ?> == 46
-<?cs var:(#6 + #3) + #5 * (#5 + #3) ?> == 49
-
-testing brackets for hdf var arrays
-
-<?cs var:v[#5+#3] ?>
-<?cs var:#3 + v[#5+#3] + #6 ?>
-
-<?cs var:Days[#0] ?> == 0
-<?cs var:Days[#1] ?> == 1
-<?cs var:Days[#2] ?> == 2
-
-<?cs var:Days[#0]["Abbr"] ?> == Mon
-<?cs var:Days[#1]["Abbr"] ?> == Tues
-<?cs var:Days[#2]["Abbr"] ?> == Wed
-
-<?cs set:ins = "Inside" ?>
-<?cs each:in=Outside[#1][ins] ?> <?cs var:in ?><?cs /each ?> == 2 3
-
-<?cs loop:x=#1,#20 ?><?cs set:foo[x] = x ?><?cs /loop ?>
-<?cs loop:x=#1,#20 ?><?cs var:foo[x] ?> == <?cs var:x ?>
-<?cs /loop ?>
-<?cs each:x=foo ?><?cs var:x ?>
-<?cs /each ?>
diff --git a/cs/test11.cs.gold b/cs/test11.cs.gold
deleted file mode 100644
index b189e92..0000000
--- a/cs/test11.cs.gold
+++ /dev/null
@@ -1,73 +0,0 @@
-Parsing test11.cs
-
-testing parenthesis for order of operations
-
-40 == 40
-7 == 7
-19 == 19
-35 == 35
-40 == 40
-40 == 40
-81 == 81
-46 == 46
-49 == 49
-
-testing brackets for hdf var arrays
-
-
-9
-
-0 == 0
-1 == 1
-2 == 2
-
-Mon == Mon
-Tues == Tues
-Wed == Wed
-
-
- 2 3 == 2 3
-
-
-1 == 1
-2 == 2
-3 == 3
-4 == 4
-5 == 5
-6 == 6
-7 == 7
-8 == 8
-9 == 9
-10 == 10
-11 == 11
-12 == 12
-13 == 13
-14 == 14
-15 == 15
-16 == 16
-17 == 17
-18 == 18
-19 == 19
-20 == 20
-
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-
diff --git a/cs/test12.cs b/cs/test12.cs
deleted file mode 100644
index 12b0308..0000000
--- a/cs/test12.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-<?cs def:display_files(files) ?>
- <ul>
- <?cs each:file = files ?>
- <li><?cs var:file.Name ?></li>
- <?cs if:file.Sub.0.Name ?>
- <?cs call:display_files(file.Sub) ?>
- <?cs /if ?>
- <?cs /each ?>
- </ul>
-<?cs /def ?>
-
-<?cs call:display_files(Files) ?>
-
-<?cs def:display_files2(files, spc) ?>
- <?cs # This tests whether we can set a local var ?>
- <?cs # Also, whether we can set a local var to itself.. ?>
- <?cs set:spc = spc ?>
- <?cs each:file = files ?>
- <?cs var:spc ?><?cs var:file.Name ?><br>
- <?cs if:file.Sub.0.Name ?>
- <?cs call:display_files2(file.Sub, spc + "&nbsp;") ?>
- <?cs /if ?>
- <?cs /each ?>
-<?cs /def ?>
-
-<?cs set:blank = "" ?>
-<?cs call:display_files2(Files, blank) ?>
-
diff --git a/cs/test12.cs.gold b/cs/test12.cs.gold
deleted file mode 100644
index fa5ad09..0000000
--- a/cs/test12.cs.gold
+++ /dev/null
@@ -1,156 +0,0 @@
-Parsing test12.cs
-
-
-
-
-
- <ul>
-
- <li>Desktop</li>
-
-
- <ul>
-
- <li>Bookmarks.html</li>
-
-
- <li>History.txt</li>
-
-
- <li>Resume.doc</li>
-
-
- <li>Favorites</li>
-
-
- <ul>
-
- <li>foo</li>
-
-
- <li>bar</li>
-
-
- <li>boo</li>
-
-
- <li>baz</li>
-
-
- <li>faq</li>
-
-
- <li>far</li>
-
-
- </ul>
-
-
-
- </ul>
-
-
-
- <li>.cshrc</li>
-
-
- <li>Mail</li>
-
-
- <ul>
-
- <li>inbox</li>
-
-
- <li>received</li>
-
-
- <li>postponed</li>
-
-
- </ul>
-
-
-
- </ul>
-
-
-
-
-
-
-
-
-
-
- Desktop<br>
-
-
-
-
-
-
- &nbsp;Bookmarks.html<br>
-
-
- &nbsp;History.txt<br>
-
-
- &nbsp;Resume.doc<br>
-
-
- &nbsp;Favorites<br>
-
-
-
-
-
-
- &nbsp;&nbsp;foo<br>
-
-
- &nbsp;&nbsp;bar<br>
-
-
- &nbsp;&nbsp;boo<br>
-
-
- &nbsp;&nbsp;baz<br>
-
-
- &nbsp;&nbsp;faq<br>
-
-
- &nbsp;&nbsp;far<br>
-
-
-
-
-
-
-
-
- .cshrc<br>
-
-
- Mail<br>
-
-
-
-
-
-
- &nbsp;inbox<br>
-
-
- &nbsp;received<br>
-
-
- &nbsp;postponed<br>
-
-
-
-
-
-
-
diff --git a/cs/test13.cs b/cs/test13.cs
deleted file mode 100644
index 907eb9e..0000000
--- a/cs/test13.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-
-<?cs each:test = EvarTests ?>
- <?cs lvar:test ?>
-<?cs /each ?>
-
-<?cs lvar: CS_START + " alt:Foo " + CS_END + "bar" + CS_START + " /alt " + CS_END ?>
diff --git a/cs/test13.cs.gold b/cs/test13.cs.gold
deleted file mode 100644
index b21dfb4..0000000
--- a/cs/test13.cs.gold
+++ /dev/null
@@ -1,11 +0,0 @@
-Parsing test13.cs
-
-
- Worn Out
-
- test1
-
- test 2 wow
-
-
-Worn Out
diff --git a/cs/test14.cs b/cs/test14.cs
deleted file mode 100644
index ff487ef..0000000
--- a/cs/test14.cs
+++ /dev/null
@@ -1,130 +0,0 @@
-
-Existence Tests
-
-<?cs if:?#0 ?>
- All numbers exist
-<?cs else ?>
- ERROR
-<?cs /if ?>
-
-<?cs if:?"Wow" ?>
- All strings exist
-<?cs else ?>
- ERROR
-<?cs /if ?>
-
-<?cs if:?("wow" + #5) ?>
- All expressions exist
-<?cs else ?>
- ERROR
-<?cs /if ?>
-
-<?cs if:?Blah ?>
- <?cs name:Blah ?> Exists
-<?cs else ?>
- ERROR
-<?cs /if ?>
-
-<?cs if:?Wow.Foo ?>
- <?cs name:Wow.Foo ?> Exists
-<?cs else ?>
- ERROR
-<?cs /if ?>
-
-<?cs if:?Blooey ?>
- ERROR
-<?cs else ?>
- Blooey doesn't exist
-<?cs /if ?>
-
-<?cs if:!?Blooey ?>
- Blooey doesn't exist
-<?cs else ?>
- ERROR
-<?cs /if ?>
-
-<?cs if:Blooey ?>
- ERROR
-<?cs else ?>
- Blooey doesn't exist (implied)
-<?cs /if ?>
-
-<?cs if:!Blooey ?>
- Blooey doesn't exist (implied negative)
-<?cs else ?>
- ERROR
-<?cs /if ?>
-
-<?cs if:Blooey || TestIf ?>
- ERROR
-<?cs else ?>
- CORRECT boolean test, blooey doesn't exist, testif == 0 so its false
-<?cs /if ?>
-
-<?cs if:?Blooey || ?TestIf ?>
- explicit existence test
-<?cs else ?>
- ERROR
-<?cs /if ?>
-
-testing not op
-
-<?cs if:!#0 ?>
- Testing not zero
-<?cs else ?>
- ERROR
-<?cs /if ?>
-
-<?cs if:!#1 ?>
- ERROR
-<?cs else ?>
- Testing not one
-<?cs /if ?>
-
-<?cs if:!$1 ?>
- Testing not exist var one
-<?cs else ?>
- ERROR
-<?cs /if ?>
-
-<?cs if:!(?Blooey || ?TestIf) ?>
- ERROR
-<?cs else ?>
- not expression existence test
-<?cs /if ?>
-
-<?cs if:!(#0 || Blooey) ?>
- not expression test
-<?cs else ?>
- ERROR
-<?cs /if ?>
-
-<?cs if:!(#0 || arg1) ?>
- ERROR
-<?cs else ?>
- not expression test
-<?cs /if ?>
-
- array exists test
-<?cs var:Days[TestIf] ?>
-<?cs if:?Days[TestIf] ?>
- PASS
-<?cs else ?>
- ERROR
-<?cs /if ?>
-
-array element exists test
-<?cs var:Days[TestIf].Abbr ?>
-<?cs if:?Days[TestIf].Abbr ?>
- PASS
-<?cs else ?>
- ERROR
-<?cs /if ?>
-
-array element exists test false
-<?cs var:Days[TestIf].foo ?>
-<?cs if:?Days[TestIf].foo ?>
- ERROR
-<?cs else ?>
- PASS
-<?cs /if ?>
diff --git a/cs/test14.cs.gold b/cs/test14.cs.gold
deleted file mode 100644
index b4df553..0000000
--- a/cs/test14.cs.gold
+++ /dev/null
@@ -1,91 +0,0 @@
-Parsing test14.cs
-
-Existence Tests
-
-
- All numbers exist
-
-
-
- All strings exist
-
-
-
- All expressions exist
-
-
-
- Blah Exists
-
-
-
- Foo Exists
-
-
-
- Blooey doesn't exist
-
-
-
- Blooey doesn't exist
-
-
-
- Blooey doesn't exist (implied)
-
-
-
- Blooey doesn't exist (implied negative)
-
-
-
- CORRECT boolean test, blooey doesn't exist, testif == 0 so its false
-
-
-
- explicit existence test
-
-
-testing not op
-
-
- Testing not zero
-
-
-
- Testing not one
-
-
-
- Testing not exist var one
-
-
-
- not expression existence test
-
-
-
- not expression test
-
-
-
- not expression test
-
-
- array exists test
-0
-
- PASS
-
-
-array element exists test
-Mon
-
- PASS
-
-
-array element exists test false
-
-
- PASS
-
diff --git a/cs/test15.cs b/cs/test15.cs
deleted file mode 100644
index 8ab1f50..0000000
--- a/cs/test15.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-
-test functions
-
-string.length <?cs var:string.length("This is the end of the world...") ?> == 31
-
-subcount <?cs var:subcount(Foo.Bar.Baz) ?> == 4
-
-len (depreciated) <?cs var:len(Foo.Bar.Baz) ?> == 4
-
-
diff --git a/cs/test15.cs.gold b/cs/test15.cs.gold
deleted file mode 100644
index 68b3095..0000000
--- a/cs/test15.cs.gold
+++ /dev/null
@@ -1,11 +0,0 @@
-Parsing test15.cs
-
-test functions
-
-string.length 31 == 31
-
-subcount 4 == 4
-
-len (depreciated) 4 == 4
-
-
diff --git a/cs/test16.cs b/cs/test16.cs
deleted file mode 100644
index 29b6049..0000000
--- a/cs/test16.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-<?cs lvar:C ?>
-<?cs lvar:C ?>
-<?cs lvar:C ?>
-
-<?cs each:A = Days ?>
- <?cs lvar:C ?>
-<?cs /each ?>
diff --git a/cs/test16.cs.gold b/cs/test16.cs.gold
deleted file mode 100644
index c6477f6..0000000
--- a/cs/test16.cs.gold
+++ /dev/null
@@ -1,20 +0,0 @@
-Parsing test16.cs
-HELLO/WORLD
-HELLO/WORLD
-HELLO/WORLD
-
-
- 0/WORLD
-
- 1/WORLD
-
- 2/WORLD
-
- 3/WORLD
-
- 4/WORLD
-
- 5/WORLD
-
- 6/WORLD
-
diff --git a/cs/test17.cs b/cs/test17.cs
deleted file mode 100644
index 28251b6..0000000
--- a/cs/test17.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-
-Test from Chuck Simmons for setting of null value
-
-<?cs def:set_field(card, out_field, in_field, default, color)
-?><?cs if:in_field.changed == #1
-?><?cs set:color="#ff0000"
-?><?cs /if
-?><?cs set:val = in_field
-?><?cs if:!?val || (val == "")
-?><?cs set:val = default
-?><?cs /if
-?><?cs set:card[out_field] = "<font color=" + color + ">" + val +
-"</font>"
-?><?cs /def ?>
-
-<?cs call:set_field(Biz, "Address2", Biz.Address2, "", "#888888")
-?><?cs call:set_field(Biz, "Address3", Biz.Address3, "", "#888888") ?>
-
-Biz.Address2 = <?cs var:Biz.Address2 ?>
-Biz.Address3 = <?cs var:Biz.Address3 ?>
-
diff --git a/cs/test17.cs.gold b/cs/test17.cs.gold
deleted file mode 100644
index 3b3ce8c..0000000
--- a/cs/test17.cs.gold
+++ /dev/null
@@ -1,11 +0,0 @@
-Parsing test17.cs
-
-Test from Chuck Simmons for setting of null value
-
-
-
-
-
-Biz.Address2 = <font color=#888888>addr</font>
-Biz.Address3 = <font color=#888888></font>
-
diff --git a/cs/test18.cs b/cs/test18.cs
deleted file mode 100644
index 90b342a..0000000
--- a/cs/test18.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-
-<?cs set:foo["baz"].right = "dot right" ?>
-<?cs set:foo["baz"].right.label = "dot right" ?>
-
-<? cs set:foo["baz"] + right = "plus right" ?>
-<?cs set:Files.0.Funk = "bam" ?>
-
-
-<?cs def:style() ?>....<?cs /def ?>
-
-<?cs call:style() ?>
-
-with whitespace
-<?cs call:style( ) ?>
-
-with extra variable
-<? cs call:style( foo ) ?>
-
-With whitespace in def...
-<?cs def:style2( ) ?>....<?cs /def ?>
-
-<?cs call:style2() ?>
-
-
-<?cs def:set_info(side, label, value) ?>
- <?cs set:rows[row][side].label = label ?>
- <?cs set:rows[row][side].value = value ?>
- <?cs # the following test would throw a warning if enabled ?>
- <?cs # set:side.foo = row ?>
- <?cs set:row = row + #1 ?>
-<?cs /def ?>
-
-<?cs set:row = #0 ?>
-<?cs call:set_info("left", "phone", Days.0.Abbr) ?>
-
diff --git a/cs/test18.cs.gold b/cs/test18.cs.gold
deleted file mode 100644
index 4f673e2..0000000
--- a/cs/test18.cs.gold
+++ /dev/null
@@ -1,36 +0,0 @@
-Parsing test18.cs
-
-
-
-
-<? cs set:foo["baz"] + right = "plus right" ?>
-
-
-
-
-
-....
-
-with whitespace
-....
-
-with extra variable
-<? cs call:style( foo ) ?>
-
-With whitespace in def...
-
-
-....
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/cs/test19.cs b/cs/test19.cs
deleted file mode 100644
index 1bd9f86..0000000
--- a/cs/test19.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-
-<?cs loop:a=0,1,1 ?>
-<?cs loop:b=0,1,1 ?>
-a: <?cs var:a ?> b: <?cs var:b ?>
-
-!a || b: <?cs var:!a || b ?>
-
-!(a || b): <?cs var:!(a || b) ?>
-<?cs /loop ?>
-<?cs /loop ?>
-
-<?cs if:?Wow["Foo"] ?>
- Wow.Foo exists <?cs var:Wow.Foo ?>
-<?cs /if ?>
-
-<?cs if:?Wow["Bar"] ?>
- Wow.Bar exists <?cs var:Wow.Bar ?>
-<?cs /if ?>
-
-3: <?cs var:max((1,3),2) ?>
-2: <?cs var:max((3,1),2) ?>
diff --git a/cs/test19.cs.gold b/cs/test19.cs.gold
deleted file mode 100644
index 9ed306d..0000000
--- a/cs/test19.cs.gold
+++ /dev/null
@@ -1,40 +0,0 @@
-Parsing test19.cs
-
-
-
-a: 0 b: 0
-
-!a || b: 1
-
-!(a || b): 1
-
-a: 0 b: 1
-
-!a || b: 1
-
-!(a || b): 0
-
-
-
-a: 1 b: 0
-
-!a || b: 0
-
-!(a || b): 0
-
-a: 1 b: 1
-
-!a || b: 1
-
-!(a || b): 0
-
-
-
-
- Wow.Foo exists 3
-
-
-
-
-3: 3
-2: 2
diff --git a/cs/test2.cs b/cs/test2.cs
deleted file mode 100644
index 05095c5..0000000
--- a/cs/test2.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-
-I'm in test2.cs
-
-<?cs if:var ?>
- I'm in an if
-<?cs /if ?>
-wow2
diff --git a/cs/test2.cs.gold b/cs/test2.cs.gold
deleted file mode 100644
index 1730461..0000000
--- a/cs/test2.cs.gold
+++ /dev/null
@@ -1,6 +0,0 @@
-Parsing test2.cs
-
-I'm in test2.cs
-
-
-wow2
diff --git a/cs/test3.cs b/cs/test3.cs
deleted file mode 100644
index e9226f9..0000000
--- a/cs/test3.cs
+++ /dev/null
@@ -1,80 +0,0 @@
-
-<?cs def:Date._weekday(day,four) ?>
-<?cs each:wday = Days ?>
- <?cs if:wday == day ?>
- <?cs var:wday.Abbr ?>
- <?cs /if ?>
-<?cs /each ?>
-<?cs if:day == "6" ?>
-<?cs var:Days.0.Abbr ?>
-<?cs elseif:day == "0" ?>
-<?cs var:Days.1.Abbr ?>
-<?cs elseif:day == "1" ?>
-<?cs var:Days.2.Abbr ?>
-<?cs elseif:day == "2" ?>
-<?cs var:Days.3.Abbr ?>
-<?cs elseif:day == "3" ?>
-<?cs var:Days.4.Abbr ?>
-<?cs elseif:day == "4" ?>
-<?cs var:Days.5.Abbr ?>
-<?cs elseif:day == "5" ?>
-<?cs var:Days.6.Abbr ?>
-<?cs /if ?>
-<?cs /def ?>
-
-
-<?cs def:echo(wow) ?>
- <?cs var:$wow ?>
-<?cs /def ?>
-
-before weekday
-
-<?cs call:Date._weekday(Wow.Foo,#5) ?>
-
-before echo
-
-echo a variable: 3
-<?cs call:echo(Wow.Foo) ?>
-echo a string: hellow world
-<?cs call:echo("hello world") ?>
-echo a number: 5
-<?cs call:echo(#5) ?>
-
-<?cs def:call_echo(wow) ?>
-<?cs call:echo(wow) ?>
-<?cs /def ?>
-
-echo a variable: 3
-<?cs call:call_echo(Wow.Foo) ?>
-echo a string: hellow world
-<?cs call:call_echo("hello world") ?>
-echo a number: 5
-<?cs call:call_echo(#5) ?>
-
-<?cs def:echo2(bar) ?>
- <?cs var:wow ?>
-<?cs /def ?>
-
-<?cs def:call_echo2(wow, weird) ?>
- <?cs call:echo2(weird) ?>
-<?cs /def ?>
-
-these tests show that local variables are live in sub calls
-echo a variable: 3
-<?cs call:call_echo2(Wow.Foo, "error") ?>
-echo a string: hellow world
-<?cs call:call_echo2("hello world", "error") ?>
-echo a number: 5
-<?cs call:call_echo2(#5, "error") ?>
-
-after echo
-
-<?cs def:print_day(d) ?>
- <?cs var:d ?> == <?cs var:d.Abbr ?>
-<?cs /def ?>
-
-testing macro calls in local vars in an each
-<?cs each:day=Days ?>
- <?cs call:print_day(day) ?>
- <?cs call:echo(day.Abbr) ?>
-<?cs /each ?>
diff --git a/cs/test3.cs.gold b/cs/test3.cs.gold
deleted file mode 100644
index 0db932f..0000000
--- a/cs/test3.cs.gold
+++ /dev/null
@@ -1,147 +0,0 @@
-Parsing test3.cs
-
-
-
-
-
-
-before weekday
-
-
-
-
-
-
-
-
-
-
- Thur
-
-
-
-
-
-
-
-
-
-Fri
-
-
-
-before echo
-
-echo a variable: 3
-
- 3
-
-echo a string: hellow world
-
- hello world
-
-echo a number: 5
-
- 5
-
-
-
-
-echo a variable: 3
-
-
- 3
-
-
-echo a string: hellow world
-
-
- hello world
-
-
-echo a number: 5
-
-
- 5
-
-
-
-
-
-
-
-these tests show that local variables are live in sub calls
-echo a variable: 3
-
-
- 3
-
-
-echo a string: hellow world
-
-
- hello world
-
-
-echo a number: 5
-
-
- 5
-
-
-
-after echo
-
-
-
-testing macro calls in local vars in an each
-
-
- 0 == Mon
-
-
- Mon
-
-
-
- 1 == Tues
-
-
- Tues
-
-
-
- 2 == Wed
-
-
- Wed
-
-
-
- 3 == Thur
-
-
- Thur
-
-
-
- 4 == Fri
-
-
- Fri
-
-
-
- 5 == Sat
-
-
- Sat
-
-
-
- 6 == Sun
-
-
- Sun
-
-
diff --git a/cs/test4.cs b/cs/test4.cs
deleted file mode 100644
index c7a1156..0000000
--- a/cs/test4.cs
+++ /dev/null
@@ -1,126 +0,0 @@
-
-Testing cs set
-
-<?cs set:Set.1 = $5 ?>
-
-<?cs var:Set.1 ?>
-
-<?cs set:Set.2 = #5 + #5 * #5?>
-
-<?cs var:Set.2 ?>
-
-<?cs set:Set.3 = Foo + " " + Blah ?>
-<?cs var:Set.3 ?>
-
-<?cs # test increment ?>
-<?cs set:Set.1 = #5 ?>
-<?cs set:Set.1 = Set.1 + #1 ?>
-<?cs var:Set.1 ?>
-
-<?cs each:set = Set ?>
- <?cs set:set.5 = "The end of the world." ?>
-<?cs /each ?>
-
-<?cs var:Set.1.5 ?>
-
-<?cs if:#5 % #2 ?>
- 5 % 2 == true
-<?cs else ?>
-ERROR! um, wrong?
- 5 % 2 == false?
-<?cs /if ?>
-
-<?cs if:#4 % #2 ?>
- um, wrong?
-ERROR! 4 % 2 == true?
-<?cs else ?>
- 4 % 2 == false
-<?cs /if ?>
-
-<?cs if:#4 > #0 ?>
- Yes, 4 > 0
-<?cs else ?>
-ERROR! Wrong, 4 is not < 0
-<?cs /if ?>
-
-<?cs if:#4 < #0 ?>
-ERROR! 4 > 0
-<?cs else ?>
-right, 4 > 0
-<?cs /if ?>
-
-<?cs if:#0 <= #5 ?>
-right, 0 <= 5
-<?cs else ?>
-ERROR! 0 <= 5
-<?cs /if ?>
-
-<?cs if:#0 >= #5 ?>
-ERROR! 0 >= 5
-<?cs else ?>
-right, 0 >= 5
-<?cs /if ?>
-
-<?cs if:"0" <= #5 ?>
-right "0" <= #5
-<?cs else ?>
-ERROR! "0" <= #5
-<?cs /if ?>
-
-<?cs # -- double digits -- ?>
-
-<?cs if:"9" > #14 ?>
-ERROR! "9" > #14
-<?cs else ?>
-right "9" < #14
-<?cs /if ?>
-
-
-<?cs # --- explicit strings --- ?>
-
-<?cs if:"9" > "14" ?>
-ERROR "9" > "14" (strings)
-<?cs else ?>
-right "9" < "14" (strings)
-<?cs /if ?>
-
-<?cs # --- hdf strings --- ?>
-
-<?cs if:Numbers.hdf9 > Numbers.hdf14 ?>
-ERROR! hdf 9 > hdf 14
-<?cs else ?>
-right hdf "9" < hdf "14"
-<?cs /if ?>
-
-
-<?cs each:msg = CGI.box.msgs ?>
-
-<?cs set:row_url = "/box_bm_body_frm.cs?boxid=" +
- Query.boxid + "&cur=" + msg.ticket_id +
- "&idx_cur=" + CGI.box.cur.min_box_idx +
- "&split=" + Query.split +
- "&filter=" + Query.filter +
- "&sort=" + Query.sort +
- "&sort_dir=" + Query.sort_dir +
- "&from_search=" + Query.from_search ?>
-
-<?cs var:row_url ?>
-
-<?cs /each ?>
-
-<?cs each:msg = CGI.box.msgs ?>
-
-<?cs set:row_url = "/box_bm_body_frm.cs?boxid=" +
- boxid + "&cur=" + msg.ticket_id +
- "&idx_cur=" + CGI.box.cur.min_box_idx +
- "&split=" + split +
- "&filter=" + filter +
- "&sort=" + sort +
- "&sort_dir=" + sort_dir +
- "&from_search=" + from_search ?>
-
-<?cs var:row_url ?>
-
-<?cs /each ?>
-
-
diff --git a/cs/test4.cs.gold b/cs/test4.cs.gold
deleted file mode 100644
index 4028483..0000000
--- a/cs/test4.cs.gold
+++ /dev/null
@@ -1,119 +0,0 @@
-Parsing test4.cs
-
-Testing cs set
-
-
-
-
-
-
-
-30
-
-
-Worn Out wow
-
-
-
-
-6
-
-
-
-
-
-
-
-
-
-The end of the world.
-
-
- 5 % 2 == true
-
-
-
- 4 % 2 == false
-
-
-
- Yes, 4 > 0
-
-
-
-right, 4 > 0
-
-
-
-right, 0 <= 5
-
-
-
-right, 0 >= 5
-
-
-
-right "0" <= #5
-
-
-
-
-
-right "9" < #14
-
-
-
-
-
-
-right "9" < "14" (strings)
-
-
-
-
-
-right hdf "9" < hdf "14"
-
-
-
-
-
-
-
-/box_bm_body_frm.cs?boxid=2&cur=1&idx_cur=1&split=1&filter=0&sort=t&sort_dir=u&from_search=
-
-
-
-
-
-/box_bm_body_frm.cs?boxid=2&cur=2&idx_cur=1&split=1&filter=0&sort=t&sort_dir=u&from_search=
-
-
-
-
-
-/box_bm_body_frm.cs?boxid=2&cur=3&idx_cur=1&split=1&filter=0&sort=t&sort_dir=u&from_search=
-
-
-
-
-
-
-
-/box_bm_body_frm.cs?boxid=&cur=1&idx_cur=1&split=&filter=&sort=&sort_dir=&from_search=
-
-
-
-
-
-/box_bm_body_frm.cs?boxid=&cur=2&idx_cur=1&split=&filter=&sort=&sort_dir=&from_search=
-
-
-
-
-
-/box_bm_body_frm.cs?boxid=&cur=3&idx_cur=1&split=&filter=&sort=&sort_dir=&from_search=
-
-
-
-
diff --git a/cs/test5.cs b/cs/test5.cs
deleted file mode 100644
index 179654f..0000000
--- a/cs/test5.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-
-<?cs if:Neg == #-1 ?>
- Correct, Neg is -1
-<?cs /if ?>
-
-<?cs if:Neg != #-1 ?>
- ERROR!
-<?cs /if ?>
-
-<?cs set: foo = #1 ?>
-<?cs set:bar = #1 ?>
-
-<?cs set:blah=#10?>
-<?cs set:blah2=#10+blah?>
-blah2 = <?cs var:blah2?>
-
-<?cs var:My.Test ?>
-<?cs var:My.Test2.Abbr ?>
diff --git a/cs/test5.cs.gold b/cs/test5.cs.gold
deleted file mode 100644
index 6804f0e..0000000
--- a/cs/test5.cs.gold
+++ /dev/null
@@ -1,17 +0,0 @@
-Parsing test5.cs
-
-
- Correct, Neg is -1
-
-
-
-
-
-
-
-
-
-blah2 = 20
-
-Mon
-Mon
diff --git a/cs/test6.cs b/cs/test6.cs
deleted file mode 100644
index 006374c..0000000
--- a/cs/test6.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-
-Testing existence
-<?cs if:Color ?>
- Color=Color (CORRECT)
-<?cs else ?>
- ERROR
-<?cs /if ?>
-
-Testing not existence
-<?cs if:!NoVar ?>
- Correct, doesn't exist
-<?cs else ?>
- ERROR, doesn't exist
-<?cs /if ?>
-
-<?cs if:NoVar ?>
- ERROR, doesn't exist
-<?cs else ?>
- Correct, doesn't exist
-<?cs /if ?>
diff --git a/cs/test6.cs.gold b/cs/test6.cs.gold
deleted file mode 100644
index 53a49f9..0000000
--- a/cs/test6.cs.gold
+++ /dev/null
@@ -1,15 +0,0 @@
-Parsing test6.cs
-
-Testing existence
-
- Color=Color (CORRECT)
-
-
-Testing not existence
-
- Correct, doesn't exist
-
-
-
- Correct, doesn't exist
-
diff --git a/cs/test7.cs b/cs/test7.cs
deleted file mode 100644
index c5e40a3..0000000
--- a/cs/test7.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-
-LOOP Test
-
-1, 3, 5
-<?cs loop:x = #1, #5, #2 ?><?cs var:x ?>, <?cs /loop ?>
-
-1, 3, 5... 205
-<?cs loop:x = #1, #205, #2 ?><?cs var:x ?>, <?cs /loop ?>
-
-backwards
-<?cs loop:x = #205, #1, "-2" ?><?cs var:x ?>, <?cs /loop ?>
-
-broken
-<?cs loop:x = #1, #205, #-2 ?><?cs var:x ?>, <?cs /loop ?>
-
-<?cs def:do_loop(var1, var2, var3) ?>
- <?cs loop:x = var1, var2, var3 ?><?cs var:x ?>, <?cs /loop ?>
-<?cs /def ?>
-
-<?cs call:do_loop(#1, #20, #2) ?>
diff --git a/cs/test7.cs.gold b/cs/test7.cs.gold
deleted file mode 100644
index aadf826..0000000
--- a/cs/test7.cs.gold
+++ /dev/null
@@ -1,21 +0,0 @@
-Parsing test7.cs
-
-LOOP Test
-
-1, 3, 5
-1, 3, 5,
-
-1, 3, 5... 205
-1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113, 115, 117, 119, 121, 123, 125, 127, 129, 131, 133, 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205,
-
-backwards
-205, 203, 201, 199, 197, 195, 193, 191, 189, 187, 185, 183, 181, 179, 177, 175, 173, 171, 169, 167, 165, 163, 161, 159, 157, 155, 153, 151, 149, 147, 145, 143, 141, 139, 137, 135, 133, 131, 129, 127, 125, 123, 121, 119, 117, 115, 113, 111, 109, 107, 105, 103, 101, 99, 97, 95, 93, 91, 89, 87, 85, 83, 81, 79, 77, 75, 73, 71, 69, 67, 65, 63, 61, 59, 57, 55, 53, 51, 49, 47, 45, 43, 41, 39, 37, 35, 33, 31, 29, 27, 25, 23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 1,
-
-broken
-
-
-
-
-
- 1, 3, 5, 7, 9, 11, 13, 15, 17, 19,
-
diff --git a/cs/test8.cs b/cs/test8.cs
deleted file mode 100644
index 7f922a7..0000000
--- a/cs/test8.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-
-some tests for new var is an expression
-
-<?cs var:"5" ?>
-
-<?cs var:"5" + #1 ?>
-
-<?cs var:"big" + " is better" ?>
-
-<?cs var:Blah + " potato " + Foo.Bar.Baz.0 ?>
diff --git a/cs/test8.cs.gold b/cs/test8.cs.gold
deleted file mode 100644
index 4062883..0000000
--- a/cs/test8.cs.gold
+++ /dev/null
@@ -1,11 +0,0 @@
-Parsing test8.cs
-
-some tests for new var is an expression
-
-5
-
-6
-
-big is better
-
-wow potato zero
diff --git a/cs/test9.cs b/cs/test9.cs
deleted file mode 100644
index a6c1ef0..0000000
--- a/cs/test9.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-Test for bug where in certain cases we didn't find the ending cs tag if
-there was a newline
-
-<?cs each:agent = CGI.agents ?>
-<?cs /each
-?>
diff --git a/cs/test9.cs.gold b/cs/test9.cs.gold
deleted file mode 100644
index 61c2ecb..0000000
--- a/cs/test9.cs.gold
+++ /dev/null
@@ -1,5 +0,0 @@
-Parsing test9.cs
-Test for bug where in certain cases we didn't find the ending cs tag if
-there was a newline
-
-
diff --git a/cs/test_abs_max_min.cs b/cs/test_abs_max_min.cs
deleted file mode 100644
index e3ece3b..0000000
--- a/cs/test_abs_max_min.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-
-abs(-10) = <?cs var:abs(-10) ?>
-abs("-10") = <?cs var:abs("-10") ?>
-abs("10") = <?cs var:abs("10") ?>
-abs("0") = <?cs var:abs("0") ?>
-
-<?cs loop:x = -5, 5, 1 ?>
- abs(<?cs var:x ?>) = <?cs var:abs(x) ?>
-<?cs /loop ?>
-
-min(5,10) = <?cs var:min(5, 10) ?>
-min(-5,10) = <?cs var:min(-5, 10) ?>
-min(-5,-10) = <?cs var:min(-5, -10) ?>
-min(5,-10) = <?cs var:min(5, -10) ?>
-
-max(5,10) = <?cs var:max(5, 10) ?>
-max(-5,10) = <?cs var:max(-5, 10) ?>
-max(-5,-10) = <?cs var:max(-5, -10) ?>
-max(5,-10) = <?cs var:max(5, -10) ?>
-
-<?cs loop:x = -10, 10, 1 ?>
- <?cs loop:y = -10, 10, 2 ?>
- max(<?cs var:x ?>, <?cs var:y ?>) = <?cs var:max(x,y) ?>
- max(<?cs var:y ?>, <?cs var:x ?>) = <?cs var:max(y,x) ?>
- min(<?cs var:x ?>, <?cs var:y ?>) = <?cs var:min(x,y) ?>
- min(<?cs var:y ?>, <?cs var:x ?>) = <?cs var:min(y,x) ?>
- <?cs /loop ?>
-<?cs /loop ?>
diff --git a/cs/test_abs_max_min.cs.gold b/cs/test_abs_max_min.cs.gold
deleted file mode 100644
index 8c887b1..0000000
--- a/cs/test_abs_max_min.cs.gold
+++ /dev/null
@@ -1,1239 +0,0 @@
-Parsing test_abs_max_min.cs
-
-abs(-10) = 10
-abs("-10") = 10
-abs("10") = 10
-abs("0") = 0
-
-
- abs(-5) = 5
-
- abs(-4) = 4
-
- abs(-3) = 3
-
- abs(-2) = 2
-
- abs(-1) = 1
-
- abs(0) = 0
-
- abs(1) = 1
-
- abs(2) = 2
-
- abs(3) = 3
-
- abs(4) = 4
-
- abs(5) = 5
-
-
-min(5,10) = 5
-min(-5,10) = -5
-min(-5,-10) = -10
-min(5,-10) = -10
-
-max(5,10) = 10
-max(-5,10) = 10
-max(-5,-10) = -5
-max(5,-10) = 5
-
-
-
- max(-10, -10) = -10
- max(-10, -10) = -10
- min(-10, -10) = -10
- min(-10, -10) = -10
-
- max(-10, -8) = -8
- max(-8, -10) = -8
- min(-10, -8) = -10
- min(-8, -10) = -10
-
- max(-10, -6) = -6
- max(-6, -10) = -6
- min(-10, -6) = -10
- min(-6, -10) = -10
-
- max(-10, -4) = -4
- max(-4, -10) = -4
- min(-10, -4) = -10
- min(-4, -10) = -10
-
- max(-10, -2) = -2
- max(-2, -10) = -2
- min(-10, -2) = -10
- min(-2, -10) = -10
-
- max(-10, 0) = 0
- max(0, -10) = 0
- min(-10, 0) = -10
- min(0, -10) = -10
-
- max(-10, 2) = 2
- max(2, -10) = 2
- min(-10, 2) = -10
- min(2, -10) = -10
-
- max(-10, 4) = 4
- max(4, -10) = 4
- min(-10, 4) = -10
- min(4, -10) = -10
-
- max(-10, 6) = 6
- max(6, -10) = 6
- min(-10, 6) = -10
- min(6, -10) = -10
-
- max(-10, 8) = 8
- max(8, -10) = 8
- min(-10, 8) = -10
- min(8, -10) = -10
-
- max(-10, 10) = 10
- max(10, -10) = 10
- min(-10, 10) = -10
- min(10, -10) = -10
-
-
-
- max(-9, -10) = -9
- max(-10, -9) = -9
- min(-9, -10) = -10
- min(-10, -9) = -10
-
- max(-9, -8) = -8
- max(-8, -9) = -8
- min(-9, -8) = -9
- min(-8, -9) = -9
-
- max(-9, -6) = -6
- max(-6, -9) = -6
- min(-9, -6) = -9
- min(-6, -9) = -9
-
- max(-9, -4) = -4
- max(-4, -9) = -4
- min(-9, -4) = -9
- min(-4, -9) = -9
-
- max(-9, -2) = -2
- max(-2, -9) = -2
- min(-9, -2) = -9
- min(-2, -9) = -9
-
- max(-9, 0) = 0
- max(0, -9) = 0
- min(-9, 0) = -9
- min(0, -9) = -9
-
- max(-9, 2) = 2
- max(2, -9) = 2
- min(-9, 2) = -9
- min(2, -9) = -9
-
- max(-9, 4) = 4
- max(4, -9) = 4
- min(-9, 4) = -9
- min(4, -9) = -9
-
- max(-9, 6) = 6
- max(6, -9) = 6
- min(-9, 6) = -9
- min(6, -9) = -9
-
- max(-9, 8) = 8
- max(8, -9) = 8
- min(-9, 8) = -9
- min(8, -9) = -9
-
- max(-9, 10) = 10
- max(10, -9) = 10
- min(-9, 10) = -9
- min(10, -9) = -9
-
-
-
- max(-8, -10) = -8
- max(-10, -8) = -8
- min(-8, -10) = -10
- min(-10, -8) = -10
-
- max(-8, -8) = -8
- max(-8, -8) = -8
- min(-8, -8) = -8
- min(-8, -8) = -8
-
- max(-8, -6) = -6
- max(-6, -8) = -6
- min(-8, -6) = -8
- min(-6, -8) = -8
-
- max(-8, -4) = -4
- max(-4, -8) = -4
- min(-8, -4) = -8
- min(-4, -8) = -8
-
- max(-8, -2) = -2
- max(-2, -8) = -2
- min(-8, -2) = -8
- min(-2, -8) = -8
-
- max(-8, 0) = 0
- max(0, -8) = 0
- min(-8, 0) = -8
- min(0, -8) = -8
-
- max(-8, 2) = 2
- max(2, -8) = 2
- min(-8, 2) = -8
- min(2, -8) = -8
-
- max(-8, 4) = 4
- max(4, -8) = 4
- min(-8, 4) = -8
- min(4, -8) = -8
-
- max(-8, 6) = 6
- max(6, -8) = 6
- min(-8, 6) = -8
- min(6, -8) = -8
-
- max(-8, 8) = 8
- max(8, -8) = 8
- min(-8, 8) = -8
- min(8, -8) = -8
-
- max(-8, 10) = 10
- max(10, -8) = 10
- min(-8, 10) = -8
- min(10, -8) = -8
-
-
-
- max(-7, -10) = -7
- max(-10, -7) = -7
- min(-7, -10) = -10
- min(-10, -7) = -10
-
- max(-7, -8) = -7
- max(-8, -7) = -7
- min(-7, -8) = -8
- min(-8, -7) = -8
-
- max(-7, -6) = -6
- max(-6, -7) = -6
- min(-7, -6) = -7
- min(-6, -7) = -7
-
- max(-7, -4) = -4
- max(-4, -7) = -4
- min(-7, -4) = -7
- min(-4, -7) = -7
-
- max(-7, -2) = -2
- max(-2, -7) = -2
- min(-7, -2) = -7
- min(-2, -7) = -7
-
- max(-7, 0) = 0
- max(0, -7) = 0
- min(-7, 0) = -7
- min(0, -7) = -7
-
- max(-7, 2) = 2
- max(2, -7) = 2
- min(-7, 2) = -7
- min(2, -7) = -7
-
- max(-7, 4) = 4
- max(4, -7) = 4
- min(-7, 4) = -7
- min(4, -7) = -7
-
- max(-7, 6) = 6
- max(6, -7) = 6
- min(-7, 6) = -7
- min(6, -7) = -7
-
- max(-7, 8) = 8
- max(8, -7) = 8
- min(-7, 8) = -7
- min(8, -7) = -7
-
- max(-7, 10) = 10
- max(10, -7) = 10
- min(-7, 10) = -7
- min(10, -7) = -7
-
-
-
- max(-6, -10) = -6
- max(-10, -6) = -6
- min(-6, -10) = -10
- min(-10, -6) = -10
-
- max(-6, -8) = -6
- max(-8, -6) = -6
- min(-6, -8) = -8
- min(-8, -6) = -8
-
- max(-6, -6) = -6
- max(-6, -6) = -6
- min(-6, -6) = -6
- min(-6, -6) = -6
-
- max(-6, -4) = -4
- max(-4, -6) = -4
- min(-6, -4) = -6
- min(-4, -6) = -6
-
- max(-6, -2) = -2
- max(-2, -6) = -2
- min(-6, -2) = -6
- min(-2, -6) = -6
-
- max(-6, 0) = 0
- max(0, -6) = 0
- min(-6, 0) = -6
- min(0, -6) = -6
-
- max(-6, 2) = 2
- max(2, -6) = 2
- min(-6, 2) = -6
- min(2, -6) = -6
-
- max(-6, 4) = 4
- max(4, -6) = 4
- min(-6, 4) = -6
- min(4, -6) = -6
-
- max(-6, 6) = 6
- max(6, -6) = 6
- min(-6, 6) = -6
- min(6, -6) = -6
-
- max(-6, 8) = 8
- max(8, -6) = 8
- min(-6, 8) = -6
- min(8, -6) = -6
-
- max(-6, 10) = 10
- max(10, -6) = 10
- min(-6, 10) = -6
- min(10, -6) = -6
-
-
-
- max(-5, -10) = -5
- max(-10, -5) = -5
- min(-5, -10) = -10
- min(-10, -5) = -10
-
- max(-5, -8) = -5
- max(-8, -5) = -5
- min(-5, -8) = -8
- min(-8, -5) = -8
-
- max(-5, -6) = -5
- max(-6, -5) = -5
- min(-5, -6) = -6
- min(-6, -5) = -6
-
- max(-5, -4) = -4
- max(-4, -5) = -4
- min(-5, -4) = -5
- min(-4, -5) = -5
-
- max(-5, -2) = -2
- max(-2, -5) = -2
- min(-5, -2) = -5
- min(-2, -5) = -5
-
- max(-5, 0) = 0
- max(0, -5) = 0
- min(-5, 0) = -5
- min(0, -5) = -5
-
- max(-5, 2) = 2
- max(2, -5) = 2
- min(-5, 2) = -5
- min(2, -5) = -5
-
- max(-5, 4) = 4
- max(4, -5) = 4
- min(-5, 4) = -5
- min(4, -5) = -5
-
- max(-5, 6) = 6
- max(6, -5) = 6
- min(-5, 6) = -5
- min(6, -5) = -5
-
- max(-5, 8) = 8
- max(8, -5) = 8
- min(-5, 8) = -5
- min(8, -5) = -5
-
- max(-5, 10) = 10
- max(10, -5) = 10
- min(-5, 10) = -5
- min(10, -5) = -5
-
-
-
- max(-4, -10) = -4
- max(-10, -4) = -4
- min(-4, -10) = -10
- min(-10, -4) = -10
-
- max(-4, -8) = -4
- max(-8, -4) = -4
- min(-4, -8) = -8
- min(-8, -4) = -8
-
- max(-4, -6) = -4
- max(-6, -4) = -4
- min(-4, -6) = -6
- min(-6, -4) = -6
-
- max(-4, -4) = -4
- max(-4, -4) = -4
- min(-4, -4) = -4
- min(-4, -4) = -4
-
- max(-4, -2) = -2
- max(-2, -4) = -2
- min(-4, -2) = -4
- min(-2, -4) = -4
-
- max(-4, 0) = 0
- max(0, -4) = 0
- min(-4, 0) = -4
- min(0, -4) = -4
-
- max(-4, 2) = 2
- max(2, -4) = 2
- min(-4, 2) = -4
- min(2, -4) = -4
-
- max(-4, 4) = 4
- max(4, -4) = 4
- min(-4, 4) = -4
- min(4, -4) = -4
-
- max(-4, 6) = 6
- max(6, -4) = 6
- min(-4, 6) = -4
- min(6, -4) = -4
-
- max(-4, 8) = 8
- max(8, -4) = 8
- min(-4, 8) = -4
- min(8, -4) = -4
-
- max(-4, 10) = 10
- max(10, -4) = 10
- min(-4, 10) = -4
- min(10, -4) = -4
-
-
-
- max(-3, -10) = -3
- max(-10, -3) = -3
- min(-3, -10) = -10
- min(-10, -3) = -10
-
- max(-3, -8) = -3
- max(-8, -3) = -3
- min(-3, -8) = -8
- min(-8, -3) = -8
-
- max(-3, -6) = -3
- max(-6, -3) = -3
- min(-3, -6) = -6
- min(-6, -3) = -6
-
- max(-3, -4) = -3
- max(-4, -3) = -3
- min(-3, -4) = -4
- min(-4, -3) = -4
-
- max(-3, -2) = -2
- max(-2, -3) = -2
- min(-3, -2) = -3
- min(-2, -3) = -3
-
- max(-3, 0) = 0
- max(0, -3) = 0
- min(-3, 0) = -3
- min(0, -3) = -3
-
- max(-3, 2) = 2
- max(2, -3) = 2
- min(-3, 2) = -3
- min(2, -3) = -3
-
- max(-3, 4) = 4
- max(4, -3) = 4
- min(-3, 4) = -3
- min(4, -3) = -3
-
- max(-3, 6) = 6
- max(6, -3) = 6
- min(-3, 6) = -3
- min(6, -3) = -3
-
- max(-3, 8) = 8
- max(8, -3) = 8
- min(-3, 8) = -3
- min(8, -3) = -3
-
- max(-3, 10) = 10
- max(10, -3) = 10
- min(-3, 10) = -3
- min(10, -3) = -3
-
-
-
- max(-2, -10) = -2
- max(-10, -2) = -2
- min(-2, -10) = -10
- min(-10, -2) = -10
-
- max(-2, -8) = -2
- max(-8, -2) = -2
- min(-2, -8) = -8
- min(-8, -2) = -8
-
- max(-2, -6) = -2
- max(-6, -2) = -2
- min(-2, -6) = -6
- min(-6, -2) = -6
-
- max(-2, -4) = -2
- max(-4, -2) = -2
- min(-2, -4) = -4
- min(-4, -2) = -4
-
- max(-2, -2) = -2
- max(-2, -2) = -2
- min(-2, -2) = -2
- min(-2, -2) = -2
-
- max(-2, 0) = 0
- max(0, -2) = 0
- min(-2, 0) = -2
- min(0, -2) = -2
-
- max(-2, 2) = 2
- max(2, -2) = 2
- min(-2, 2) = -2
- min(2, -2) = -2
-
- max(-2, 4) = 4
- max(4, -2) = 4
- min(-2, 4) = -2
- min(4, -2) = -2
-
- max(-2, 6) = 6
- max(6, -2) = 6
- min(-2, 6) = -2
- min(6, -2) = -2
-
- max(-2, 8) = 8
- max(8, -2) = 8
- min(-2, 8) = -2
- min(8, -2) = -2
-
- max(-2, 10) = 10
- max(10, -2) = 10
- min(-2, 10) = -2
- min(10, -2) = -2
-
-
-
- max(-1, -10) = -1
- max(-10, -1) = -1
- min(-1, -10) = -10
- min(-10, -1) = -10
-
- max(-1, -8) = -1
- max(-8, -1) = -1
- min(-1, -8) = -8
- min(-8, -1) = -8
-
- max(-1, -6) = -1
- max(-6, -1) = -1
- min(-1, -6) = -6
- min(-6, -1) = -6
-
- max(-1, -4) = -1
- max(-4, -1) = -1
- min(-1, -4) = -4
- min(-4, -1) = -4
-
- max(-1, -2) = -1
- max(-2, -1) = -1
- min(-1, -2) = -2
- min(-2, -1) = -2
-
- max(-1, 0) = 0
- max(0, -1) = 0
- min(-1, 0) = -1
- min(0, -1) = -1
-
- max(-1, 2) = 2
- max(2, -1) = 2
- min(-1, 2) = -1
- min(2, -1) = -1
-
- max(-1, 4) = 4
- max(4, -1) = 4
- min(-1, 4) = -1
- min(4, -1) = -1
-
- max(-1, 6) = 6
- max(6, -1) = 6
- min(-1, 6) = -1
- min(6, -1) = -1
-
- max(-1, 8) = 8
- max(8, -1) = 8
- min(-1, 8) = -1
- min(8, -1) = -1
-
- max(-1, 10) = 10
- max(10, -1) = 10
- min(-1, 10) = -1
- min(10, -1) = -1
-
-
-
- max(0, -10) = 0
- max(-10, 0) = 0
- min(0, -10) = -10
- min(-10, 0) = -10
-
- max(0, -8) = 0
- max(-8, 0) = 0
- min(0, -8) = -8
- min(-8, 0) = -8
-
- max(0, -6) = 0
- max(-6, 0) = 0
- min(0, -6) = -6
- min(-6, 0) = -6
-
- max(0, -4) = 0
- max(-4, 0) = 0
- min(0, -4) = -4
- min(-4, 0) = -4
-
- max(0, -2) = 0
- max(-2, 0) = 0
- min(0, -2) = -2
- min(-2, 0) = -2
-
- max(0, 0) = 0
- max(0, 0) = 0
- min(0, 0) = 0
- min(0, 0) = 0
-
- max(0, 2) = 2
- max(2, 0) = 2
- min(0, 2) = 0
- min(2, 0) = 0
-
- max(0, 4) = 4
- max(4, 0) = 4
- min(0, 4) = 0
- min(4, 0) = 0
-
- max(0, 6) = 6
- max(6, 0) = 6
- min(0, 6) = 0
- min(6, 0) = 0
-
- max(0, 8) = 8
- max(8, 0) = 8
- min(0, 8) = 0
- min(8, 0) = 0
-
- max(0, 10) = 10
- max(10, 0) = 10
- min(0, 10) = 0
- min(10, 0) = 0
-
-
-
- max(1, -10) = 1
- max(-10, 1) = 1
- min(1, -10) = -10
- min(-10, 1) = -10
-
- max(1, -8) = 1
- max(-8, 1) = 1
- min(1, -8) = -8
- min(-8, 1) = -8
-
- max(1, -6) = 1
- max(-6, 1) = 1
- min(1, -6) = -6
- min(-6, 1) = -6
-
- max(1, -4) = 1
- max(-4, 1) = 1
- min(1, -4) = -4
- min(-4, 1) = -4
-
- max(1, -2) = 1
- max(-2, 1) = 1
- min(1, -2) = -2
- min(-2, 1) = -2
-
- max(1, 0) = 1
- max(0, 1) = 1
- min(1, 0) = 0
- min(0, 1) = 0
-
- max(1, 2) = 2
- max(2, 1) = 2
- min(1, 2) = 1
- min(2, 1) = 1
-
- max(1, 4) = 4
- max(4, 1) = 4
- min(1, 4) = 1
- min(4, 1) = 1
-
- max(1, 6) = 6
- max(6, 1) = 6
- min(1, 6) = 1
- min(6, 1) = 1
-
- max(1, 8) = 8
- max(8, 1) = 8
- min(1, 8) = 1
- min(8, 1) = 1
-
- max(1, 10) = 10
- max(10, 1) = 10
- min(1, 10) = 1
- min(10, 1) = 1
-
-
-
- max(2, -10) = 2
- max(-10, 2) = 2
- min(2, -10) = -10
- min(-10, 2) = -10
-
- max(2, -8) = 2
- max(-8, 2) = 2
- min(2, -8) = -8
- min(-8, 2) = -8
-
- max(2, -6) = 2
- max(-6, 2) = 2
- min(2, -6) = -6
- min(-6, 2) = -6
-
- max(2, -4) = 2
- max(-4, 2) = 2
- min(2, -4) = -4
- min(-4, 2) = -4
-
- max(2, -2) = 2
- max(-2, 2) = 2
- min(2, -2) = -2
- min(-2, 2) = -2
-
- max(2, 0) = 2
- max(0, 2) = 2
- min(2, 0) = 0
- min(0, 2) = 0
-
- max(2, 2) = 2
- max(2, 2) = 2
- min(2, 2) = 2
- min(2, 2) = 2
-
- max(2, 4) = 4
- max(4, 2) = 4
- min(2, 4) = 2
- min(4, 2) = 2
-
- max(2, 6) = 6
- max(6, 2) = 6
- min(2, 6) = 2
- min(6, 2) = 2
-
- max(2, 8) = 8
- max(8, 2) = 8
- min(2, 8) = 2
- min(8, 2) = 2
-
- max(2, 10) = 10
- max(10, 2) = 10
- min(2, 10) = 2
- min(10, 2) = 2
-
-
-
- max(3, -10) = 3
- max(-10, 3) = 3
- min(3, -10) = -10
- min(-10, 3) = -10
-
- max(3, -8) = 3
- max(-8, 3) = 3
- min(3, -8) = -8
- min(-8, 3) = -8
-
- max(3, -6) = 3
- max(-6, 3) = 3
- min(3, -6) = -6
- min(-6, 3) = -6
-
- max(3, -4) = 3
- max(-4, 3) = 3
- min(3, -4) = -4
- min(-4, 3) = -4
-
- max(3, -2) = 3
- max(-2, 3) = 3
- min(3, -2) = -2
- min(-2, 3) = -2
-
- max(3, 0) = 3
- max(0, 3) = 3
- min(3, 0) = 0
- min(0, 3) = 0
-
- max(3, 2) = 3
- max(2, 3) = 3
- min(3, 2) = 2
- min(2, 3) = 2
-
- max(3, 4) = 4
- max(4, 3) = 4
- min(3, 4) = 3
- min(4, 3) = 3
-
- max(3, 6) = 6
- max(6, 3) = 6
- min(3, 6) = 3
- min(6, 3) = 3
-
- max(3, 8) = 8
- max(8, 3) = 8
- min(3, 8) = 3
- min(8, 3) = 3
-
- max(3, 10) = 10
- max(10, 3) = 10
- min(3, 10) = 3
- min(10, 3) = 3
-
-
-
- max(4, -10) = 4
- max(-10, 4) = 4
- min(4, -10) = -10
- min(-10, 4) = -10
-
- max(4, -8) = 4
- max(-8, 4) = 4
- min(4, -8) = -8
- min(-8, 4) = -8
-
- max(4, -6) = 4
- max(-6, 4) = 4
- min(4, -6) = -6
- min(-6, 4) = -6
-
- max(4, -4) = 4
- max(-4, 4) = 4
- min(4, -4) = -4
- min(-4, 4) = -4
-
- max(4, -2) = 4
- max(-2, 4) = 4
- min(4, -2) = -2
- min(-2, 4) = -2
-
- max(4, 0) = 4
- max(0, 4) = 4
- min(4, 0) = 0
- min(0, 4) = 0
-
- max(4, 2) = 4
- max(2, 4) = 4
- min(4, 2) = 2
- min(2, 4) = 2
-
- max(4, 4) = 4
- max(4, 4) = 4
- min(4, 4) = 4
- min(4, 4) = 4
-
- max(4, 6) = 6
- max(6, 4) = 6
- min(4, 6) = 4
- min(6, 4) = 4
-
- max(4, 8) = 8
- max(8, 4) = 8
- min(4, 8) = 4
- min(8, 4) = 4
-
- max(4, 10) = 10
- max(10, 4) = 10
- min(4, 10) = 4
- min(10, 4) = 4
-
-
-
- max(5, -10) = 5
- max(-10, 5) = 5
- min(5, -10) = -10
- min(-10, 5) = -10
-
- max(5, -8) = 5
- max(-8, 5) = 5
- min(5, -8) = -8
- min(-8, 5) = -8
-
- max(5, -6) = 5
- max(-6, 5) = 5
- min(5, -6) = -6
- min(-6, 5) = -6
-
- max(5, -4) = 5
- max(-4, 5) = 5
- min(5, -4) = -4
- min(-4, 5) = -4
-
- max(5, -2) = 5
- max(-2, 5) = 5
- min(5, -2) = -2
- min(-2, 5) = -2
-
- max(5, 0) = 5
- max(0, 5) = 5
- min(5, 0) = 0
- min(0, 5) = 0
-
- max(5, 2) = 5
- max(2, 5) = 5
- min(5, 2) = 2
- min(2, 5) = 2
-
- max(5, 4) = 5
- max(4, 5) = 5
- min(5, 4) = 4
- min(4, 5) = 4
-
- max(5, 6) = 6
- max(6, 5) = 6
- min(5, 6) = 5
- min(6, 5) = 5
-
- max(5, 8) = 8
- max(8, 5) = 8
- min(5, 8) = 5
- min(8, 5) = 5
-
- max(5, 10) = 10
- max(10, 5) = 10
- min(5, 10) = 5
- min(10, 5) = 5
-
-
-
- max(6, -10) = 6
- max(-10, 6) = 6
- min(6, -10) = -10
- min(-10, 6) = -10
-
- max(6, -8) = 6
- max(-8, 6) = 6
- min(6, -8) = -8
- min(-8, 6) = -8
-
- max(6, -6) = 6
- max(-6, 6) = 6
- min(6, -6) = -6
- min(-6, 6) = -6
-
- max(6, -4) = 6
- max(-4, 6) = 6
- min(6, -4) = -4
- min(-4, 6) = -4
-
- max(6, -2) = 6
- max(-2, 6) = 6
- min(6, -2) = -2
- min(-2, 6) = -2
-
- max(6, 0) = 6
- max(0, 6) = 6
- min(6, 0) = 0
- min(0, 6) = 0
-
- max(6, 2) = 6
- max(2, 6) = 6
- min(6, 2) = 2
- min(2, 6) = 2
-
- max(6, 4) = 6
- max(4, 6) = 6
- min(6, 4) = 4
- min(4, 6) = 4
-
- max(6, 6) = 6
- max(6, 6) = 6
- min(6, 6) = 6
- min(6, 6) = 6
-
- max(6, 8) = 8
- max(8, 6) = 8
- min(6, 8) = 6
- min(8, 6) = 6
-
- max(6, 10) = 10
- max(10, 6) = 10
- min(6, 10) = 6
- min(10, 6) = 6
-
-
-
- max(7, -10) = 7
- max(-10, 7) = 7
- min(7, -10) = -10
- min(-10, 7) = -10
-
- max(7, -8) = 7
- max(-8, 7) = 7
- min(7, -8) = -8
- min(-8, 7) = -8
-
- max(7, -6) = 7
- max(-6, 7) = 7
- min(7, -6) = -6
- min(-6, 7) = -6
-
- max(7, -4) = 7
- max(-4, 7) = 7
- min(7, -4) = -4
- min(-4, 7) = -4
-
- max(7, -2) = 7
- max(-2, 7) = 7
- min(7, -2) = -2
- min(-2, 7) = -2
-
- max(7, 0) = 7
- max(0, 7) = 7
- min(7, 0) = 0
- min(0, 7) = 0
-
- max(7, 2) = 7
- max(2, 7) = 7
- min(7, 2) = 2
- min(2, 7) = 2
-
- max(7, 4) = 7
- max(4, 7) = 7
- min(7, 4) = 4
- min(4, 7) = 4
-
- max(7, 6) = 7
- max(6, 7) = 7
- min(7, 6) = 6
- min(6, 7) = 6
-
- max(7, 8) = 8
- max(8, 7) = 8
- min(7, 8) = 7
- min(8, 7) = 7
-
- max(7, 10) = 10
- max(10, 7) = 10
- min(7, 10) = 7
- min(10, 7) = 7
-
-
-
- max(8, -10) = 8
- max(-10, 8) = 8
- min(8, -10) = -10
- min(-10, 8) = -10
-
- max(8, -8) = 8
- max(-8, 8) = 8
- min(8, -8) = -8
- min(-8, 8) = -8
-
- max(8, -6) = 8
- max(-6, 8) = 8
- min(8, -6) = -6
- min(-6, 8) = -6
-
- max(8, -4) = 8
- max(-4, 8) = 8
- min(8, -4) = -4
- min(-4, 8) = -4
-
- max(8, -2) = 8
- max(-2, 8) = 8
- min(8, -2) = -2
- min(-2, 8) = -2
-
- max(8, 0) = 8
- max(0, 8) = 8
- min(8, 0) = 0
- min(0, 8) = 0
-
- max(8, 2) = 8
- max(2, 8) = 8
- min(8, 2) = 2
- min(2, 8) = 2
-
- max(8, 4) = 8
- max(4, 8) = 8
- min(8, 4) = 4
- min(4, 8) = 4
-
- max(8, 6) = 8
- max(6, 8) = 8
- min(8, 6) = 6
- min(6, 8) = 6
-
- max(8, 8) = 8
- max(8, 8) = 8
- min(8, 8) = 8
- min(8, 8) = 8
-
- max(8, 10) = 10
- max(10, 8) = 10
- min(8, 10) = 8
- min(10, 8) = 8
-
-
-
- max(9, -10) = 9
- max(-10, 9) = 9
- min(9, -10) = -10
- min(-10, 9) = -10
-
- max(9, -8) = 9
- max(-8, 9) = 9
- min(9, -8) = -8
- min(-8, 9) = -8
-
- max(9, -6) = 9
- max(-6, 9) = 9
- min(9, -6) = -6
- min(-6, 9) = -6
-
- max(9, -4) = 9
- max(-4, 9) = 9
- min(9, -4) = -4
- min(-4, 9) = -4
-
- max(9, -2) = 9
- max(-2, 9) = 9
- min(9, -2) = -2
- min(-2, 9) = -2
-
- max(9, 0) = 9
- max(0, 9) = 9
- min(9, 0) = 0
- min(0, 9) = 0
-
- max(9, 2) = 9
- max(2, 9) = 9
- min(9, 2) = 2
- min(2, 9) = 2
-
- max(9, 4) = 9
- max(4, 9) = 9
- min(9, 4) = 4
- min(4, 9) = 4
-
- max(9, 6) = 9
- max(6, 9) = 9
- min(9, 6) = 6
- min(6, 9) = 6
-
- max(9, 8) = 9
- max(8, 9) = 9
- min(9, 8) = 8
- min(8, 9) = 8
-
- max(9, 10) = 10
- max(10, 9) = 10
- min(9, 10) = 9
- min(10, 9) = 9
-
-
-
- max(10, -10) = 10
- max(-10, 10) = 10
- min(10, -10) = -10
- min(-10, 10) = -10
-
- max(10, -8) = 10
- max(-8, 10) = 10
- min(10, -8) = -8
- min(-8, 10) = -8
-
- max(10, -6) = 10
- max(-6, 10) = 10
- min(10, -6) = -6
- min(-6, 10) = -6
-
- max(10, -4) = 10
- max(-4, 10) = 10
- min(10, -4) = -4
- min(-4, 10) = -4
-
- max(10, -2) = 10
- max(-2, 10) = 10
- min(10, -2) = -2
- min(-2, 10) = -2
-
- max(10, 0) = 10
- max(0, 10) = 10
- min(10, 0) = 0
- min(0, 10) = 0
-
- max(10, 2) = 10
- max(2, 10) = 10
- min(10, 2) = 2
- min(2, 10) = 2
-
- max(10, 4) = 10
- max(4, 10) = 10
- min(10, 4) = 4
- min(4, 10) = 4
-
- max(10, 6) = 10
- max(6, 10) = 10
- min(10, 6) = 6
- min(6, 10) = 6
-
- max(10, 8) = 10
- max(8, 10) = 10
- min(10, 8) = 8
- min(8, 10) = 8
-
- max(10, 10) = 10
- max(10, 10) = 10
- min(10, 10) = 10
- min(10, 10) = 10
-
-
diff --git a/cs/test_cgi_escape.cs b/cs/test_cgi_escape.cs
deleted file mode 100644
index 66dc4d4..0000000
--- a/cs/test_cgi_escape.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-
-<html>
-<head><title><?cs var:Title ?></title>
-<style>
-@import(http://www.clearsilver.net?<?cs var:UrlArg ?>)
-</style>
-<script>
-var default_escape = "<?cs var:BlahJs ?>";
-var explicit_escape = "<?cs var:js_escape(BlahJs) ?>";
-document.writeln("<style>");
-var style_in_script = "<?cs var:BlahJs?>";
-document.writeln("</style>");
-</script>
-<img alt="default escape" src="http://www.clearsilver.net?<?cs var:UrlArg ?>"/>
-<img alt="explicit escape" src="http://www.clearsilver.net?<?cs var:url_escape(UrlArg) ?>"/>
-implicit: <?cs var:Title ?>
-explicit escape: <?cs var:html_escape(Title) ?>
-uvar: <?cs uvar:Title ?>
-implicit_slice: <?cs var:string.slice(Title, 7, 100) ?>
-slice_explicit_escape: <?cs var:string.slice(html_escape(Title), 7, 100) ?>
-explicit_escape_slice: <?cs var:html_escape(string.slice(Title, 7, 100)) ?>
-</head>
-</html>
-non-html output: <?cs var:Title ?>
-<script>Script outside HTML: <?cs var:BlahJs ?></script>
-<script><html>Script outside HTML with HTML inside: <?cs var:BlahJs ?></html></script>
-
-<script>Script outside HTML: <?cs var:BlahJs ?></script>
-
-
-<?cs def:get_var(var) ?>
- get_var: <?cs var:var ?>
- <?cs escape: "url" ?>
- get_var_inside_url_escape: <?cs var:var ?>
- get_var_inside_url_escape_with_explicit_escape: <?cs var:url_escape(var) ?>
- <?cs /escape ?>
- <?cs escape: "none" ?>
- get_var_inside_none_escape: <?cs var:var ?>
- get_var_inside_none_escape_with_explicit_url_escape: <?cs var:url_escape(var) ?>
- <?cs /escape ?>
-<?cs /def ?>
-
-<?cs if #1 == #1 ?>
- <?cs if #2 == #2 ?>
- nested ifs
- <?cs /if ?>
-<?cs /if ?>
-
-<?cs escape: "html" ?>
-Calling get_var(UrlArg) from within 'escape: "html"' <br/>
---&gt; <?cs call:get_var(UrlArg) ?>
-<?cs /escape ?>
-
-Including test_escape.cs: <br/>
----
-<?cs escape: "html" ?>
-<?cs include! "test_escape.cs" ?>
-<?cs /escape ?>
-----
-
-<?cs escape: "html" ?>
- escape level 1
- <?cs escape: "js" ?>
- escape level 2
- <?cs /escape ?>
-<?cs /escape ?>
diff --git a/cs/test_chuck.cs b/cs/test_chuck.cs
deleted file mode 100644
index 0046d6e..0000000
--- a/cs/test_chuck.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-<?cs def:set_field(card, out_field, in_field, default, color)
-?><?cs if:in_field.changed == #1
-?><?cs set:color="#ff0000"
-?><?cs /if
-?><?cs set:val = in_field
-?><?cs if:!?val || (val == "")
-?><?cs set:val = default
-?><?cs /if
-?><?cs set:card[out_field] = "<font color=" + color + ">" + val +
-"</font>"
-?><?cs /def ?>
-
-<?cs call:set_field(Biz, "Address2", Biz.Address2, "", "#888888")
-?><?cs call:set_field(Biz, "Address3", Biz.Address3, "", "#888888") ?>
-
-Biz.Address2 = <?cs var:Biz.Address2 ?>
-Biz.Address3 = <?cs var:Biz.Address3 ?>
-
diff --git a/cs/test_chuck.cs.gold b/cs/test_chuck.cs.gold
deleted file mode 100644
index 6ab2fb0..0000000
--- a/cs/test_chuck.cs.gold
+++ /dev/null
@@ -1,8 +0,0 @@
-Parsing test_chuck.cs
-
-
-
-
-Biz.Address2 = <font color=#888888>addr</font>
-Biz.Address3 = <font color=#888888></font>
-
diff --git a/cs/test_comma.cs b/cs/test_comma.cs
deleted file mode 100644
index c0087b0..0000000
--- a/cs/test_comma.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-
-Comma tests, evalute both but pass right most as expression result
-
-4: <?cs var:2,4 ?>
-
-also, "do nothing" lparen operator
-4: <?cs var:(2,4) ?>
-
-2: <?cs var:(4,2) ?>
-
-3: <?cs var:max((1,3),2) ?>
diff --git a/cs/test_comma.cs.gold b/cs/test_comma.cs.gold
deleted file mode 100644
index 2b1dda2..0000000
--- a/cs/test_comma.cs.gold
+++ /dev/null
@@ -1,12 +0,0 @@
-Parsing test_comma.cs
-
-Comma tests, evalute both but pass right most as expression result
-
-4: 4
-
-also, "do nothing" lparen operator
-4: 4
-
-2: 2
-
-3: 3
diff --git a/cs/test_crc.cs b/cs/test_crc.cs
deleted file mode 100644
index 17c01e9..0000000
--- a/cs/test_crc.cs
+++ /dev/null
@@ -1,3 +0,0 @@
-<?cs var:string.crc("my string") ?>
-<?cs var:string.crc("my other string") ?>
-<?cs var:string.crc("my first string") ?>
diff --git a/cs/test_crc.cs.gold b/cs/test_crc.cs.gold
deleted file mode 100644
index b1090ea..0000000
--- a/cs/test_crc.cs.gold
+++ /dev/null
@@ -1,4 +0,0 @@
-Parsing test_crc.cs
-419156592
-1357503972
--2128917020
diff --git a/cs/test_each_array.cs b/cs/test_each_array.cs
deleted file mode 100644
index 268b596..0000000
--- a/cs/test_each_array.cs
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-<?cs each:sub = Foo.Bar["Baz"] ?>
- <?cs var:sub ?>
-<?cs /each ?>
diff --git a/cs/test_each_array.cs.gold b/cs/test_each_array.cs.gold
deleted file mode 100644
index 3060189..0000000
--- a/cs/test_each_array.cs.gold
+++ /dev/null
@@ -1,12 +0,0 @@
-Parsing test_each_array.cs
-
-
-
- zero
-
- one
-
- two
-
- three
-
diff --git a/cs/test_escape.cs b/cs/test_escape.cs
deleted file mode 100644
index 8cb14ee..0000000
--- a/cs/test_escape.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-escape: not used
-UrlArg: <?cs var:UrlArg ?>
-BlahJs: <?cs var:BlahJs ?>
-Title: <?cs var:Title ?>
-
-<?cs escape: "none" ?>
-escape: none
-UrlArg: <?cs var:UrlArg ?>
-BlahJs: <?cs var:BlahJs ?>
-Title: <?cs var:Title ?>
-<?cs /escape ?>
-
-<?cs escape: "html" ?>
-escape: html
-UrlArg: <?cs var:UrlArg ?>
-BlahJs: <?cs var:BlahJs ?>
-Title: <?cs var:Title ?>
-<?cs /escape ?>
-
-<?cs escape: "js" ?>
-escape: js
-UrlArg: <?cs var:UrlArg ?>
-BlahJs: <?cs var:BlahJs ?>
-Title: <?cs var:Title ?>
-<?cs /escape ?>
-
-<?cs escape: "url" ?>
-escape: url
-UrlArg: <?cs var:UrlArg ?>
-BlahJs: <?cs var:BlahJs ?>
-Title: <?cs var:Title ?>
-<?cs /escape ?>
-
-<?cs escape: "html" ?>
-Nested escaping: html
-The internal calls should take precedence
-<?cs escape: "url" ?>url -> UrlArg: <?cs var:UrlArg ?><?cs /escape ?>
-<?cs escape: "js" ?>js -> BlahJs: <?cs var:BlahJs ?><?cs /escape ?>
-<?cs escape: "html" ?>html -> Title: <?cs var:Title ?><?cs /escape ?>
-<?cs /escape ?>
-
-Defining the macro echo_all inside of a "html" escape.
-<?cs escape: "html" ?><?cs def:echo_all(e) ?>
-not used: <?cs var:e ?>
-none: <?cs escape: "none" ?><?cs var:e ?><?cs /escape ?>
-url: <?cs escape: "url" ?><?cs var:e ?><?cs /escape ?>
-js: <?cs escape: "js" ?><?cs var:e ?><?cs /escape ?>
-html: <?cs escape: "html" ?><?cs var:e ?><?cs /escape ?>
-<?cs /def ?><?cs /escape ?>
-
-Calling echo_all() macro:
-<?cs call:echo_all(Title + UrlArh + BlahJs) ?>
-
-<?cs escape: "html" ?>
-Calling echo_all() macro from within "html":
-<?cs call:echo_all(Title + UrlArh + BlahJs) ?>
-<?cs /escape ?>
-
-<?cs escape: "js" ?>
-Calling echo_all() macro from within "js":
-<?cs call:echo_all(Title + UrlArh + BlahJs) ?>
-<?cs /escape ?>
-
-<?cs escape: "url" ?>
-Calling echo_all() macro from within "url":
-<?cs call:echo_all(Title + UrlArh + BlahJs) ?>
-<?cs /escape ?>
diff --git a/cs/test_escape.cs.gold b/cs/test_escape.cs.gold
deleted file mode 100644
index a6114b3..0000000
--- a/cs/test_escape.cs.gold
+++ /dev/null
@@ -1,86 +0,0 @@
-Parsing test_escape.cs
-escape: not used
-UrlArg: Secret Password~!@#$%^&*()+=-_|\[]{}:";'<>,.?
-BlahJs: quote ' backslash \ semicolon ; end tag </script>
-Title: </title><script>alert(1)</script>
-
-
-escape: none
-UrlArg: Secret Password~!@#$%^&*()+=-_|\[]{}:";'<>,.?
-BlahJs: quote ' backslash \ semicolon ; end tag </script>
-Title: </title><script>alert(1)</script>
-
-
-
-escape: html
-UrlArg: Secret Password~!@#$%^&amp;*()+=-_|\[]{}:&quot;;&#39;&lt;&gt;,.?
-BlahJs: quote &#39; backslash \ semicolon ; end tag &lt;/script&gt;
-Title: &lt;/title&gt;&lt;script&gt;alert(1)&lt;/script&gt;
-
-
-
-escape: js
-UrlArg: Secret Password~!@#$%^\x26*()+=-_|\x5C[]{}:\x22\x3B\x27\x3C\x3E,.?
-BlahJs: quote \x27 backslash \x5C semicolon \x3B end tag \x3C\x2Fscript\x3E
-Title: \x3C\x2Ftitle\x3E\x3Cscript\x3Ealert(1)\x3C\x2Fscript\x3E
-
-
-
-escape: url
-UrlArg: Secret+Password%7E!%40%23%24%25%5E%26*()%2B%3D-_%7C%5C%5B%5D%7B%7D%3A%22%3B%27%3C%3E%2C.%3F
-BlahJs: quote+%27+backslash+%5C+semicolon+%3B+end+tag+%3C%2Fscript%3E
-Title: %3C%2Ftitle%3E%3Cscript%3Ealert(1)%3C%2Fscript%3E
-
-
-
-Nested escaping: html
-The internal calls should take precedence
-url -> UrlArg: Secret+Password%7E!%40%23%24%25%5E%26*()%2B%3D-_%7C%5C%5B%5D%7B%7D%3A%22%3B%27%3C%3E%2C.%3F
-js -> BlahJs: quote \x27 backslash \x5C semicolon \x3B end tag \x3C\x2Fscript\x3E
-html -> Title: &lt;/title&gt;&lt;script&gt;alert(1)&lt;/script&gt;
-
-
-Defining the macro echo_all inside of a "html" escape.
-
-
-Calling echo_all() macro:
-
-not used: </title><script>alert(1)</script>quote ' backslash \ semicolon ; end tag </script>
-none: </title><script>alert(1)</script>quote ' backslash \ semicolon ; end tag </script>
-url: %3C%2Ftitle%3E%3Cscript%3Ealert(1)%3C%2Fscript%3Equote+%27+backslash+%5C+semicolon+%3B+end+tag+%3C%2Fscript%3E
-js: \x3C\x2Ftitle\x3E\x3Cscript\x3Ealert(1)\x3C\x2Fscript\x3Equote \x27 backslash \x5C semicolon \x3B end tag \x3C\x2Fscript\x3E
-html: &lt;/title&gt;&lt;script&gt;alert(1)&lt;/script&gt;quote &#39; backslash \ semicolon ; end tag &lt;/script&gt;
-
-
-
-Calling echo_all() macro from within "html":
-
-not used: &lt;/title&gt;&lt;script&gt;alert(1)&lt;/script&gt;quote &#39; backslash \ semicolon ; end tag &lt;/script&gt;
-none: </title><script>alert(1)</script>quote ' backslash \ semicolon ; end tag </script>
-url: %3C%2Ftitle%3E%3Cscript%3Ealert(1)%3C%2Fscript%3Equote+%27+backslash+%5C+semicolon+%3B+end+tag+%3C%2Fscript%3E
-js: \x3C\x2Ftitle\x3E\x3Cscript\x3Ealert(1)\x3C\x2Fscript\x3Equote \x27 backslash \x5C semicolon \x3B end tag \x3C\x2Fscript\x3E
-html: &lt;/title&gt;&lt;script&gt;alert(1)&lt;/script&gt;quote &#39; backslash \ semicolon ; end tag &lt;/script&gt;
-
-
-
-
-Calling echo_all() macro from within "js":
-
-not used: \x3C\x2Ftitle\x3E\x3Cscript\x3Ealert(1)\x3C\x2Fscript\x3Equote \x27 backslash \x5C semicolon \x3B end tag \x3C\x2Fscript\x3E
-none: </title><script>alert(1)</script>quote ' backslash \ semicolon ; end tag </script>
-url: %3C%2Ftitle%3E%3Cscript%3Ealert(1)%3C%2Fscript%3Equote+%27+backslash+%5C+semicolon+%3B+end+tag+%3C%2Fscript%3E
-js: \x3C\x2Ftitle\x3E\x3Cscript\x3Ealert(1)\x3C\x2Fscript\x3Equote \x27 backslash \x5C semicolon \x3B end tag \x3C\x2Fscript\x3E
-html: &lt;/title&gt;&lt;script&gt;alert(1)&lt;/script&gt;quote &#39; backslash \ semicolon ; end tag &lt;/script&gt;
-
-
-
-
-Calling echo_all() macro from within "url":
-
-not used: %3C%2Ftitle%3E%3Cscript%3Ealert(1)%3C%2Fscript%3Equote+%27+backslash+%5C+semicolon+%3B+end+tag+%3C%2Fscript%3E
-none: </title><script>alert(1)</script>quote ' backslash \ semicolon ; end tag </script>
-url: %3C%2Ftitle%3E%3Cscript%3Ealert(1)%3C%2Fscript%3Equote+%27+backslash+%5C+semicolon+%3B+end+tag+%3C%2Fscript%3E
-js: \x3C\x2Ftitle\x3E\x3Cscript\x3Ealert(1)\x3C\x2Fscript\x3Equote \x27 backslash \x5C semicolon \x3B end tag \x3C\x2Fscript\x3E
-html: &lt;/title&gt;&lt;script&gt;alert(1)&lt;/script&gt;quote &#39; backslash \ semicolon ; end tag &lt;/script&gt;
-
-
diff --git a/cs/test_exists.cs b/cs/test_exists.cs
deleted file mode 100644
index 879d1e1..0000000
--- a/cs/test_exists.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-array exists test
-<?cs var:Days[TestIf] ?>
-<?cs if:?Days[TestIf] ?>
- PASS
-<?cs else ?>
- ERROR
-<?cs /if ?>
diff --git a/cs/test_first_last.cs b/cs/test_first_last.cs
deleted file mode 100644
index 55fdc94..0000000
--- a/cs/test_first_last.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-
-<?cs each:num = Numbers ?>
- <?cs var:num ?>
- is_first: <?cs var:first(num) ?>
- is_last: <?cs var:last(num) ?>
-<?cs /each ?>
-
-<?cs each:day = Days ?>
- <?cs var:day ?>
- is_first: <?cs var:first(day) ?>
- is_first: <?cs var:first(day.Abbr) ?> -> never
- is_last: <?cs var:last(day) ?>
- is_last: <?cs var:last(day.Abbr) ?> -> never
-<?cs /each ?>
-
-Only one, so should be first and last
-<?cs each:test = My.Test2 ?>
- is_first: <?cs var:first(test) ?>
- is_last: <?cs var:last(test) ?>
-<?cs /each ?>
-
-Testing loop
-<?cs loop:x = 0, 50, 5 ?>
- <?cs var:x ?>
- is_first: <?cs var:first(x) ?>
- is_first: <?cs var:first(x.foo) ?> -> never
- is_last: <?cs var:last(x) ?>
- is_last: <?cs var:last(x.foo) ?> -> never
-<?cs /loop ?>
diff --git a/cs/test_first_last.cs.gold b/cs/test_first_last.cs.gold
deleted file mode 100644
index 83fc2d5..0000000
--- a/cs/test_first_last.cs.gold
+++ /dev/null
@@ -1,130 +0,0 @@
-Parsing test_first_last.cs
-
-
- 9
- is_first: 1
- is_last: 0
-
- 14
- is_first: 0
- is_last: 1
-
-
-
- 0
- is_first: 1
- is_first: 0 -> never
- is_last: 0
- is_last: 0 -> never
-
- 1
- is_first: 0
- is_first: 0 -> never
- is_last: 0
- is_last: 0 -> never
-
- 2
- is_first: 0
- is_first: 0 -> never
- is_last: 0
- is_last: 0 -> never
-
- 3
- is_first: 0
- is_first: 0 -> never
- is_last: 0
- is_last: 0 -> never
-
- 4
- is_first: 0
- is_first: 0 -> never
- is_last: 0
- is_last: 0 -> never
-
- 5
- is_first: 0
- is_first: 0 -> never
- is_last: 0
- is_last: 0 -> never
-
- 6
- is_first: 0
- is_first: 0 -> never
- is_last: 1
- is_last: 0 -> never
-
-
-Only one, so should be first and last
-
- is_first: 1
- is_last: 1
-
-
-Testing loop
-
- 0
- is_first: 1
- is_first: 0 -> never
- is_last: 0
- is_last: 0 -> never
-
- 5
- is_first: 0
- is_first: 0 -> never
- is_last: 0
- is_last: 0 -> never
-
- 10
- is_first: 0
- is_first: 0 -> never
- is_last: 0
- is_last: 0 -> never
-
- 15
- is_first: 0
- is_first: 0 -> never
- is_last: 0
- is_last: 0 -> never
-
- 20
- is_first: 0
- is_first: 0 -> never
- is_last: 0
- is_last: 0 -> never
-
- 25
- is_first: 0
- is_first: 0 -> never
- is_last: 0
- is_last: 0 -> never
-
- 30
- is_first: 0
- is_first: 0 -> never
- is_last: 0
- is_last: 0 -> never
-
- 35
- is_first: 0
- is_first: 0 -> never
- is_last: 0
- is_last: 0 -> never
-
- 40
- is_first: 0
- is_first: 0 -> never
- is_last: 0
- is_last: 0 -> never
-
- 45
- is_first: 0
- is_first: 0 -> never
- is_last: 0
- is_last: 0 -> never
-
- 50
- is_first: 0
- is_first: 0 -> never
- is_last: 1
- is_last: 0 -> never
-
diff --git a/cs/test_func.cs b/cs/test_func.cs
deleted file mode 100644
index db10c64..0000000
--- a/cs/test_func.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-testing func calls
-
-Testing register strfunc
-<?cs var:test_strfunc(Foo) ?>
-<?cs var:test_strfunc("Foo" + Foo) ?>
-
-
-<?cs var:test_strfunc((5,2)) ?>
-<?cs var:test_strfunc((5,2) + 2) ?>
-
-testing passing expressions to builtins
-<?cs loop:x = 0, 20, 2 ?>
- <?cs var:abs(x - 5) ?>
-<?cs /loop ?>
-
-25: <?cs var:max(20-5, 20+5) ?>
-15: <?cs var:min(20-5, 20+5) ?>
-
-6: <?cs var:string.length("foo" + "bar") ?>
-
-25: <?cs var:max(20-5, 20+5) ?>
-
-4: <?cs var:subcount(Foo.Bar["Baz"]) ?>
-Baz: <?cs var:name(Foo.Bar["Baz"]) ?>
-
-oba: <?cs var:string.slice("foo" + "bar", 5-3, 2+3) ?>
-
-first/last only run on local vars, which can't be created by expressions
-
-
diff --git a/cs/test_func.cs.gold b/cs/test_func.cs.gold
deleted file mode 100644
index c097389..0000000
--- a/cs/test_func.cs.gold
+++ /dev/null
@@ -1,51 +0,0 @@
-Parsing test_func.cs
-testing func calls
-
-Testing register strfunc
-worn out
-fooworn out
-
-
-2
-4
-
-testing passing expressions to builtins
-
- 5
-
- 3
-
- 1
-
- 1
-
- 3
-
- 5
-
- 7
-
- 9
-
- 11
-
- 13
-
- 15
-
-
-25: 25
-15: 15
-
-6: 6
-
-25: 25
-
-4: 4
-Baz: Baz
-
-oba: oba
-
-first/last only run on local vars, which can't be created by expressions
-
-
diff --git a/cs/test_iter.cs b/cs/test_iter.cs
deleted file mode 100644
index 4e95a87..0000000
--- a/cs/test_iter.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-
-<?cs loop:foo = #0,#30 ?>
- <?cs set:Loop[foo] = foo ?>
-<?cs /loop ?>
-
-<?cs set:count = #0 ?>
-<?cs set:Query.start = #10 ?>
-<?cs set:next = #20 ?>
-<?cs each:foo = Loop ?>
- <?cs if:#count > #Query.start && #count < #next ?>
- <?cs var:foo ?>
- <?cs /if ?>
- <?cs set:count = #count + #1 ?>
-<?cs /each ?>
diff --git a/cs/test_iter.cs.gold b/cs/test_iter.cs.gold
deleted file mode 100644
index fed23d7..0000000
--- a/cs/test_iter.cs.gold
+++ /dev/null
@@ -1,181 +0,0 @@
-Parsing test_iter.cs
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 11
-
-
-
-
- 12
-
-
-
-
- 13
-
-
-
-
- 14
-
-
-
-
- 15
-
-
-
-
- 16
-
-
-
-
- 17
-
-
-
-
- 18
-
-
-
-
- 19
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/cs/test_joo.cs b/cs/test_joo.cs
deleted file mode 100644
index c6d67d6..0000000
--- a/cs/test_joo.cs
+++ /dev/null
@@ -1,206 +0,0 @@
-Testing Empty String and empty var
-Empty has no value assigned (ie, empty), Foo has a value, NotExist doesn't exist
-Some of these tests are pretty silly
-----------------------------------------------------------------------------------
-
-Testing == ''
-[1] Empty == ''
-<?cs if:Empty == '' ?>
-PASS
-<?cs else ?>
-FAIL - empty string should equal empty string [1]
-<?cs /if ?>
-[2] Foo == ''
-<?cs if:Foo == '' ?>
-FAIL - existing var shouldn't equal empty string [2]
-<?cs else ?>
-PASS
-<?cs /if ?>
-[3] NotExist == ''
-<?cs if:NotExist == '' ?>
-FAIL - non-existing should be NULL, not empty string [3]
-<?cs else ?>
-PASS
-<?cs /if ?>
-
-Testing != ''
-[4] Empty != ''
-<?cs if:Empty != '' ?>
-FAIL - Empty var should equal empty string [4]
-<?cs else ?>
-PASS
-<?cs /if ?>
-[5] Foo != ''
-<?cs if:Foo != '' ?>
-PASS
-<?cs else ?>
-FAIL - [5]
-<?cs /if ?>
-[6] NotExist != ''
-<?cs if:NotExist != '' ?>
-PASS - Non existing var doesn't equal empty string
-<?cs else ?>
-FAIL - [6]
-<?cs /if ?>
-
-Testing ?
-[7] ?Empty
-<?cs if:?Empty ?>
-PASS
-<?cs else ?>
-FAIL - [7]
-<?cs /if ?>
-[8] ?Foo
-<?cs if:?Foo ?>
-PASS
-<?cs else ?>
-FAIL - [8]
-<?cs /if ?>
-[9] ?NotExist
-<?cs if:?NotExist ?>
-FAIL - non existing var shouldn't exist [9]
-<?cs else ?>
-PASS
-<?cs /if ?>
-
-Testing !
-[10] !Empty
-<?cs if:!Empty ?>
-PASS
-<?cs else ?>
-FAIL - [10]
-<?cs /if ?>
-[11] !Foo
-<?cs if:!Foo ?>
-FAIL - existing string shouldn't evaluate false [11]
-<?cs else ?>
-PASS
-<?cs /if ?>
-[12] !NotExist
-<?cs if:!NotExist ?>
-PASS
-<?cs else ?>
-FAIL - [12]
-<?cs /if ?>
-
-Testing !?
-[13] !?Empty
-<?cs if:!?Empty ?>
-FAIL - empty string shouldn't evaluate non-existing [13]
-<?cs else ?>
-PASS
-<?cs /if ?>
-[14] !?Foo
-<?cs if:!?Foo ?>
-FAIL - non-empty string shouldn't evaluate non-existing [14]
-<?cs else ?>
-PASS
-<?cs /if ?>
-[15] !?NotExist
-<?cs if:!?NotExist ?>
-PASS
-<?cs else ?>
-FAIL - [15]
-<?cs /if ?>
-
-Testing ?! - Existance only works on a var, otherwise always returns
-true, so ?! is always true
-[16] ?!Empty
-<?cs if:?!Empty ?>
-PASS
-<?cs else ?>
-FAIL - [16]
-<?cs /if ?>
-[17] ?!Foo
-<?cs if:?!Foo ?>
-PASS
-<?cs else ?>
-FAIL - [17]
-<?cs /if ?>
-[18] ?!NotExist
-<?cs if:?!NotExist ?>
-PASS
-<?cs else ?>
-FAIL - [18]
-<?cs /if ?>
-
-Testing ? and == '' - boolean vs. equality? um... boolean is a number,
-so these are numeric evals, and empty string is 0
-[19] ?Empty == ''
-<?cs if:?Empty == ''?>
-FAIL - IF boolean true equals empty [19]
-<?cs else ?>
-PASS - ELSE boolean true doesn't equal empty (1 != 0)
-<?cs /if ?>
-[20] ?Foo == ''
-<?cs if:?Foo == ''?>
-FAIL - IF boolean true equals empty [20]
-<?cs else ?>
-PASS - ELSE boolean true doesn't equal empty (1 != 0)
-<?cs /if ?>
-[21] ?NotExist == ''
-<?cs if:?NotExist == '' ?>
-PASS - IF boolean false equals empty (0 == 0)
-<?cs else ?>
-[22] FAIL - ELSE boolean false doesn't equal empty [22]
-<?cs /if ?>
-
-Testing ? and != '' - boolean vs. in-equality? um...
-[23] ?Empty != ''
-<?cs if:?Empty != ''?>
-PASS - IF boolean true not equal empty (1 != 0)
-<?cs else ?>
-FAIL - ELSE boolean true equals empty [23]
-<?cs /if ?>
-[24] ?Foo != ''
-<?cs if:?Foo != ''?>
-PASS - IF boolean true not equal empty (1 != 0)
-<?cs else ?>
-FAIL - ELSE boolean true equals empty [24]
-<?cs /if ?>
-[25] ?NotExist != ''
-<?cs if:?NotExist != '' ?>
-FAIL - IF boolean false not equal empty [25]
-<?cs else ?>
-PASS - ELSE boolean false equals empty (0 == 0)
-<?cs /if ?>
-
-Testing !? and == '' - all boolean true equals empty
-[26] !?Empty == ''
-<?cs if:!?Empty == ''?>
-PASS - IF boolean true equals empty
-<?cs else ?>
-FAIL - ELSE boolean true doesn't equal empty [26]
-<?cs /if ?>
-[27] !?Foo == ''
-<?cs if:!?Foo == ''?>
-PASS - IF boolean true equals empty
-<?cs else ?>
-FAIL - ELSE boolean true doesn't equal empty [27]
-<?cs /if ?>
-[28] !?NotExist == ''
-<?cs if:!?NotExist == '' ?>
-FAIL - IF boolean true equals empty [28]
-<?cs else ?>
-PASS - ELSE boolean true doesn't equal empty
-<?cs /if ?>
-
-Testing !? and != ''
-[29] !?Empty != ''
-<?cs if:!?Empty != '' ?>
-FAIL - IF boolean true not equal empty [29]
-<?cs else ?>
-PASS - ELSE boolean true equals empty
-<?cs /if ?>
-[30] !?Foo != ''
-<?cs if:!?Foo != '' ?>
-FAIL - IF boolean true not equal empty [30]
-<?cs else ?>
-PASS - ELSE boolean true equals empty
-<?cs /if ?>
-[31] !?NotExist != ''
-<?cs if:!?NotExist != '' ?>
-PASS - IF boolean true not equal empty
-<?cs else ?>
-FAIL - ELSE boolean true equals empty [31]
-<?cs /if ?>
diff --git a/cs/test_joo.cs.gold b/cs/test_joo.cs.gold
deleted file mode 100644
index a3710a8..0000000
--- a/cs/test_joo.cs.gold
+++ /dev/null
@@ -1,147 +0,0 @@
-Parsing test_joo.cs
-Testing Empty String and empty var
-Empty has no value assigned (ie, empty), Foo has a value, NotExist doesn't exist
-Some of these tests are pretty silly
-----------------------------------------------------------------------------------
-
-Testing == ''
-[1] Empty == ''
-
-PASS
-
-[2] Foo == ''
-
-PASS
-
-[3] NotExist == ''
-
-PASS
-
-
-Testing != ''
-[4] Empty != ''
-
-PASS
-
-[5] Foo != ''
-
-PASS
-
-[6] NotExist != ''
-
-PASS - Non existing var doesn't equal empty string
-
-
-Testing ?
-[7] ?Empty
-
-PASS
-
-[8] ?Foo
-
-PASS
-
-[9] ?NotExist
-
-PASS
-
-
-Testing !
-[10] !Empty
-
-PASS
-
-[11] !Foo
-
-PASS
-
-[12] !NotExist
-
-PASS
-
-
-Testing !?
-[13] !?Empty
-
-PASS
-
-[14] !?Foo
-
-PASS
-
-[15] !?NotExist
-
-PASS
-
-
-Testing ?! - Existance only works on a var, otherwise always returns
-true, so ?! is always true
-[16] ?!Empty
-
-PASS
-
-[17] ?!Foo
-
-PASS
-
-[18] ?!NotExist
-
-PASS
-
-
-Testing ? and == '' - boolean vs. equality? um... boolean is a number,
-so these are numeric evals, and empty string is 0
-[19] ?Empty == ''
-
-PASS - ELSE boolean true doesn't equal empty (1 != 0)
-
-[20] ?Foo == ''
-
-PASS - ELSE boolean true doesn't equal empty (1 != 0)
-
-[21] ?NotExist == ''
-
-PASS - IF boolean false equals empty (0 == 0)
-
-
-Testing ? and != '' - boolean vs. in-equality? um...
-[23] ?Empty != ''
-
-PASS - IF boolean true not equal empty (1 != 0)
-
-[24] ?Foo != ''
-
-PASS - IF boolean true not equal empty (1 != 0)
-
-[25] ?NotExist != ''
-
-PASS - ELSE boolean false equals empty (0 == 0)
-
-
-Testing !? and == '' - all boolean true equals empty
-[26] !?Empty == ''
-
-PASS - IF boolean true equals empty
-
-[27] !?Foo == ''
-
-PASS - IF boolean true equals empty
-
-[28] !?NotExist == ''
-
-PASS - ELSE boolean true doesn't equal empty
-
-
-Testing !? and != ''
-[29] !?Empty != ''
-
-PASS - ELSE boolean true equals empty
-
-[30] !?Foo != ''
-
-PASS - ELSE boolean true equals empty
-
-[31] !?NotExist != ''
-
-PASS - IF boolean true not equal empty
-
diff --git a/cs/test_macro_set.cs b/cs/test_macro_set.cs
deleted file mode 100644
index 16d268c..0000000
--- a/cs/test_macro_set.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-<?cs def:getWidthStyle(width, output) ?>
- <?cs set:output = "style='width:" + width + "px;'" ?>
-<?cs /def ?>
-
-Testing "pass by reference" to macro calls so they can "return" data
-
-Testing non-existant var
-<?cs call:getWidthStyle(100, attr) ?>
-<?cs var:attr ?>
-
-Testing non-existant var sub var
-<?cs call:getWidthStyle(300, attr2.foo) ?>
-<?cs var:attr2.foo ?>
-
-Testing non-existant sub var
-<?cs call:getWidthStyle(400, attr.foo) ?>
-<?cs var:attr.foo ?>
-
-Testing existant var
-<?cs set:attr3 = "" ?>
-<?cs call:getWidthStyle(200, attr3) ?>
-<?cs var:attr3 ?>
diff --git a/cs/test_macro_set.cs.gold b/cs/test_macro_set.cs.gold
deleted file mode 100644
index f04168d..0000000
--- a/cs/test_macro_set.cs.gold
+++ /dev/null
@@ -1,29 +0,0 @@
-Parsing test_macro_set.cs
-
-
-Testing "pass by reference" to macro calls so they can "return" data
-
-Testing non-existant var
-
-
-
-style='width:100px;'
-
-Testing non-existant var sub var
-
-
-
-style='width:300px;'
-
-Testing non-existant sub var
-
-
-
-style='width:400px;'
-
-Testing existant var
-
-
-
-
-style='width:200px;'
diff --git a/cs/test_name.cs b/cs/test_name.cs
deleted file mode 100644
index 01ad17b..0000000
--- a/cs/test_name.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-<?cs var:name(Wow.Foo) ?>
-
-<?cs each:count = Foo.Bar.Baz ?>
- <?cs var:name(count) ?>
-<?cs /each ?>
diff --git a/cs/test_name.cs.gold b/cs/test_name.cs.gold
deleted file mode 100644
index 9f1b382..0000000
--- a/cs/test_name.cs.gold
+++ /dev/null
@@ -1,14 +0,0 @@
-Parsing test_name.cs
-
-
-Foo
-
-
- 0
-
- 1
-
- 2
-
- 3
-
diff --git a/cs/test_numbers.cs b/cs/test_numbers.cs
deleted file mode 100644
index dafc286..0000000
--- a/cs/test_numbers.cs
+++ /dev/null
@@ -1,56 +0,0 @@
-
-<?cs var:-1 ?>
-
-<?cs if:-1 == -1 ?>
- CORRECT: -1 == -1
-<?cs else ?>
- ERROR: -1 should equal -1
-<?cs /if ?>
-
-<?cs if:-1 ?>
- CORRECT: -1 is boolean true
-<?cs else ?>
- ERROR : -1 should be boolean true
-<?cs /if ?>
-
-<?cs if:#-1 ?>
- CORRECT: #-1 is boolean true
-<?cs else ?>
- ERROR : #-1 should be boolean true
-<?cs /if ?>
-
-<?cs if:0 ?>
- ERROR: 0 should be boolean false
-<?cs else ?>
- CORRECT: 0 is boolean false
-<?cs /if ?>
-
-<?cs if:00 ?>
- ERROR: 00 should be boolean false
-<?cs else ?>
- CORRECT: 00 is boolean false
-<?cs /if ?>
-
-<?cs if:0x15 == 21 ?>
- CORRECT: 0x15 (hex) == 21
-<?cs else ?>
- ERROR: 0x15 (hex) should equal 21
-<?cs /if ?>
-
-<?cs if:0x15 ?>
- CORRECT: 0x15 is boolean true
-<?cs else ?>
- ERROR: 0x15 should be boolean true
-<?cs /if ?>
-
-<?cs if:(3*2)+4 == 10 ?>
- CORRECT: (3*2)+4 does equal 10
-<?cs else ?>
- ERROR: (3*2)+4 should equal 10
-<?cs /if ?>
-
-<?cs if:Days[0] + 2 == 2 ?>
- CORRECT: 0 + 2 == 2
-<?cs else ?>
- ERROR: 0 + 2 should equal 2
-<?cs /if ?>
diff --git a/cs/test_numbers.cs.gold b/cs/test_numbers.cs.gold
deleted file mode 100644
index 7526ef9..0000000
--- a/cs/test_numbers.cs.gold
+++ /dev/null
@@ -1,39 +0,0 @@
-Parsing test_numbers.cs
-
--1
-
-
- CORRECT: -1 == -1
-
-
-
- CORRECT: -1 is boolean true
-
-
-
- CORRECT: #-1 is boolean true
-
-
-
- CORRECT: 0 is boolean false
-
-
-
- CORRECT: 00 is boolean false
-
-
-
- CORRECT: 0x15 (hex) == 21
-
-
-
- CORRECT: 0x15 is boolean true
-
-
-
- CORRECT: (3*2)+4 does equal 10
-
-
-
- CORRECT: 0 + 2 == 2
-
diff --git a/cs/test_paren.cs b/cs/test_paren.cs
deleted file mode 100644
index aceeb35..0000000
--- a/cs/test_paren.cs
+++ /dev/null
@@ -1,5 +0,0 @@
-<?cs def:test(a) ?>
-VALUE:<?cs var:a ?>:
-<?cs /def ?>
-<?cs call:test("HELLO()") ?>
-
diff --git a/cs/test_paren.cs.gold b/cs/test_paren.cs.gold
deleted file mode 100644
index 76175d7..0000000
--- a/cs/test_paren.cs.gold
+++ /dev/null
@@ -1,6 +0,0 @@
-Parsing test_paren.cs
-
-
-VALUE:HELLO():
-
-
diff --git a/cs/test_splice.cs b/cs/test_splice.cs
deleted file mode 100644
index c38bc31..0000000
--- a/cs/test_splice.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-
-<?cs var:Foo ?>
-<?cs loop:b=0,10 ?>
-<?cs loop:e=10,0,-1 ?>
-<?cs var:string.slice(Foo, b, e) ?>
-<?cs /loop ?>
-<?cs /loop ?>
-
-Check end of string slice:
-<?cs var:string.slice(Foo, -5, -1) ?>
-<?cs var:string.slice(Foo, -5, 0) ?>
diff --git a/cs/test_splice.cs.gold b/cs/test_splice.cs.gold
deleted file mode 100644
index dea5e7e..0000000
--- a/cs/test_splice.cs.gold
+++ /dev/null
@@ -1,272 +0,0 @@
-Parsing test_splice.cs
-
-Worn Out
-
-
-Worn Out
-
-Worn Out
-
-Worn Out
-
-Worn Ou
-
-Worn O
-
-Worn
-
-Worn
-
-Wor
-
-Wo
-
-W
-
-
-
-
-
-orn Out
-
-orn Out
-
-orn Out
-
-orn Ou
-
-orn O
-
-orn
-
-orn
-
-or
-
-o
-
-
-
-
-
-
-
-rn Out
-
-rn Out
-
-rn Out
-
-rn Ou
-
-rn O
-
-rn
-
-rn
-
-r
-
-
-
-
-
-
-
-
-
-n Out
-
-n Out
-
-n Out
-
-n Ou
-
-n O
-
-n
-
-n
-
-
-
-
-
-
-
-
-
-
-
- Out
-
- Out
-
- Out
-
- Ou
-
- O
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Out
-
-Out
-
-Out
-
-Ou
-
-O
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-ut
-
-ut
-
-ut
-
-u
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-t
-
-t
-
-t
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Check end of string slice:
-n Ou
-n Out
diff --git a/cs/test_str_find.cs b/cs/test_str_find.cs
deleted file mode 100644
index d0e090a..0000000
--- a/cs/test_str_find.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-
-<?cs var:'string.find("String1", "ring")' ?>
-<?cs var:string.find("String1", "ring") ?>
-
-<?cs var:'string.find("String1", "1")' ?>
-<?cs var:string.find("String1", "1") ?>
-
-<?cs var:'string.find("String1", "S")' ?>
-<?cs var:string.find("String1", "S") ?>
-
-<?cs var:'string.find("String1", "k")' ?>
-<?cs var:string.find("String1", "k") ?>
-
-<?cs var:'Foo = "TheString2"' ?>
-<?cs set:Foo = "TheString2" ?>
-<?cs var:'string.find(Foo, "Str")' ?>
-<?cs var:string.find(Foo, "Str") ?>
-
-<?cs var:'string.find(Foo, 1+1)' ?>
-<?cs var:string.find(Foo, 1+1) ?>
diff --git a/cs/test_str_find.cs.gold b/cs/test_str_find.cs.gold
deleted file mode 100644
index 7aaf41b..0000000
--- a/cs/test_str_find.cs.gold
+++ /dev/null
@@ -1,21 +0,0 @@
-Parsing test_str_find.cs
-
-string.find("String1", "ring")
-2
-
-string.find("String1", "1")
-6
-
-string.find("String1", "S")
-0
-
-string.find("String1", "k")
--1
-
-Foo = "TheString2"
-
-string.find(Foo, "Str")
-3
-
-string.find(Foo, 1+1)
-9
diff --git a/cs/test_tag.cs b/cs/test_tag.cs
deleted file mode 100644
index 89b9454..0000000
--- a/cs/test_tag.cs
+++ /dev/null
@@ -1 +0,0 @@
-<?int1 loop:x=0,2 ?><?int1 var:x ?> <?cs var:myvar ?><?int1 /loop ?>
diff --git a/cs/test_tag.cs.gold b/cs/test_tag.cs.gold
deleted file mode 100644
index 2410b8f..0000000
--- a/cs/test_tag.cs.gold
+++ /dev/null
@@ -1,2 +0,0 @@
-Parsing test_tag.cs
-0 <?cs var:myvar ?>1 <?cs var:myvar ?>2 <?cs var:myvar ?>
diff --git a/cs/test_tag.hdf b/cs/test_tag.hdf
deleted file mode 100644
index a195fc3..0000000
--- a/cs/test_tag.hdf
+++ /dev/null
@@ -1 +0,0 @@
-Config.TagStart = int1
diff --git a/cs/test_trak1.cs b/cs/test_trak1.cs
deleted file mode 100644
index c592488..0000000
--- a/cs/test_trak1.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-<?cs if:(parent_id == #-1 && faq.topic_id == Query.topic) || (parent_id != #-1 && faq.sub_topic_id == Query.topic) ?>
- matched
-<?cs /if ?>
-
-<?cs def:test_macro(foo) ?>
- <?cs var:foo ?>
-<?cs /def ?>
-
-<?cs call:test_macro(len(faq)) ?>
diff --git a/cs/test_trak1.cs.gold b/cs/test_trak1.cs.gold
deleted file mode 100644
index 342d48b..0000000
--- a/cs/test_trak1.cs.gold
+++ /dev/null
@@ -1,8 +0,0 @@
-Parsing test_trak1.cs
-
-
-
-
-
- 2
-
diff --git a/cs/test_url_validate.cs b/cs/test_url_validate.cs
deleted file mode 100644
index 703a192..0000000
--- a/cs/test_url_validate.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-The following urls should be allowed unmodified:
-<?cs var:BlahUrl ?> = <?cs var:url_validate(BlahUrl) ?>
-<?cs var:SslUrl ?> = <?cs var:url_validate(SslUrl) ?>
-<?cs var:FtpUrl ?> = <?cs var:url_validate(FtpUrl) ?>
-<?cs var:MailUrl ?> = <?cs var:url_validate(MailUrl) ?>
-
-<?cs var:AbsUrl ?> = <?cs var:url_validate(AbsUrl) ?>
-<?cs var:AbsUrl2 ?> = <?cs var:url_validate(AbsUrl2) ?>
-<?cs var:RelUrl ?> = <?cs var:url_validate(RelUrl) ?>
-
-<?cs var:ColonUrl ?> = <?cs var:url_validate(ColonUrl) ?>
-<?cs var:ColonUrlTwo ?> = <?cs var:url_validate(ColonUrlTwo) ?>
-
-This URL should be html escaped:
-<?cs var:HtmlUrl ?> = <?cs var:url_validate(HtmlUrl) ?>
-
-
-These URLs should be changed to #
-<?cs var:JsUrl ?> = <?cs var:url_validate(JsUrl) ?>
-<?cs var:DataUrl ?> = <?cs var:url_validate(DataUrl) ?>
-<?cs var:InvalidUrl ?> = <?cs var:url_validate(InvalidUrl) ?>
-<?cs var:InvalidUrl2 ?> = <?cs var:url_validate(InvalidUrl2) ?>
-<?cs var:ShortUrl ?> = <?cs var:url_validate(ShortUrl) ?>
diff --git a/cs/test_url_validate.hdf b/cs/test_url_validate.hdf
deleted file mode 100644
index 74c6c34..0000000
--- a/cs/test_url_validate.hdf
+++ /dev/null
@@ -1,18 +0,0 @@
-BlahUrl = http://www.google.com
-SslUrl = https://www.google.com
-FtpUrl = ftp://www.google.com/a
-MailUrl = mailto:tester@google.com
-
-JsUrl = javascript:www.google.com
-DataUrl = data:text/html;base64,PHNjcmlwdD5hbGVydCgncmZjMjM5NyBpcyBzY2FyeScpPC9zY3JpcHQ+
-
-AbsUrl = /mail/
-AbsUrl2 = /
-RelUrl = mail/google.x
-HtmlUrl = http://www.google.com/<script>alert(ha)</script>/good.x
-
-ColonUrl = relative/path:name
-ColonUrlTwo = /mail/path:name
-InvalidUrl = mail:80
-InvalidUrl2 = www.google.com:80
-ShortUrl = m:x
diff --git a/cs/test_uvar.cs b/cs/test_uvar.cs
deleted file mode 100644
index de70e05..0000000
--- a/cs/test_uvar.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-<?cs uvar:BlahJs+UrlArg+Title ?>
-
-<?cs escape: "none" ?><?cs uvar:BlahJs+UrlArg+Title ?><?cs /escape ?>
-<?cs escape: "html" ?><?cs uvar:BlahJs+UrlArg+Title ?><?cs /escape ?>
-<?cs escape: "js" ?><?cs uvar:BlahJs+UrlArg+Title ?><?cs /escape ?>
-<?cs escape: "url" ?><?cs uvar:BlahJs+UrlArg+Title ?><?cs /escape ?>
diff --git a/cs/test_uvar.cs.gold b/cs/test_uvar.cs.gold
deleted file mode 100644
index 0ab570f..0000000
--- a/cs/test_uvar.cs.gold
+++ /dev/null
@@ -1,7 +0,0 @@
-Parsing test_uvar.cs
-quote ' backslash \ semicolon ; end tag </script>Secret Password~!@#$%^&*()+=-_|\[]{}:";'<>,.?</title><script>alert(1)</script>
-
-quote ' backslash \ semicolon ; end tag </script>Secret Password~!@#$%^&*()+=-_|\[]{}:";'<>,.?</title><script>alert(1)</script>
-quote ' backslash \ semicolon ; end tag </script>Secret Password~!@#$%^&*()+=-_|\[]{}:";'<>,.?</title><script>alert(1)</script>
-quote ' backslash \ semicolon ; end tag </script>Secret Password~!@#$%^&*()+=-_|\[]{}:";'<>,.?</title><script>alert(1)</script>
-quote ' backslash \ semicolon ; end tag </script>Secret Password~!@#$%^&*()+=-_|\[]{}:";'<>,.?</title><script>alert(1)</script>
diff --git a/cs/test_var.cs b/cs/test_var.cs
deleted file mode 100644
index 7660213..0000000
--- a/cs/test_var.cs
+++ /dev/null
@@ -1 +0,0 @@
-<?cs var:Blah ?>
diff --git a/cs/test_var.cs.gold b/cs/test_var.cs.gold
deleted file mode 100644
index c374000..0000000
--- a/cs/test_var.cs.gold
+++ /dev/null
@@ -1,2 +0,0 @@
-Parsing test_var.cs
-wow
diff --git a/cs/test_with.cs b/cs/test_with.cs
deleted file mode 100644
index 9b6af75..0000000
--- a/cs/test_with.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-
-<?cs loop:x=#0,#6 ?>
- <?cs with:abbr = Days[x].Abbr ?>
- <?cs var:x ?> - <?cs var:abbr ?>
- <?cs /with ?>
-<?cs /loop ?>
diff --git a/cs/test_with.cs.gold b/cs/test_with.cs.gold
deleted file mode 100644
index 699e53f..0000000
--- a/cs/test_with.cs.gold
+++ /dev/null
@@ -1,31 +0,0 @@
-Parsing test_with.cs
-
-
-
- 0 - Mon
-
-
-
- 1 - Tues
-
-
-
- 2 - Wed
-
-
-
- 3 - Thur
-
-
-
- 4 - Fri
-
-
-
- 5 - Sat
-
-
-
- 6 - Sun
-
-
diff --git a/cs_config.h b/cs_config.h
deleted file mode 100644
index ad9e92e..0000000
--- a/cs_config.h
+++ /dev/null
@@ -1,238 +0,0 @@
-/* cs_config.h. Generated by configure. */
-/* cs_config.h.in. Generated from configure.in by autoheader. */
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-/*
- * config file
- */
-
-#ifndef __CS_CONFIG_H_
-#define __CS_CONFIG_H_ 1
-
-
-/* Enable support for HTML Compression (still must be enabled at run time) */
-#define HTML_COMPRESSION 1
-
-/* Enable support for X Remote CGI Debugging */
-/* #undef ENABLE_REMOTE_DEBUG */
-
-/********* SYSTEM CONFIG ***************************************************/
-/* autoconf/configure should figure all of these out for you */
-
-/* Does your system have the snprintf() call? */
-#define HAVE_SNPRINTF 1
-
-/* Does your system have the vsnprintf() call? */
-#define HAVE_VSNPRINTF 1
-
-/* Does your system have the strtok_r() call? */
-#define HAVE_STRTOK_R 1
-
-/* Does your system have the localtime_r() call? */
-#define HAVE_LOCALTIME_R 1
-
-/* Does your system have the gmtime_r() call? */
-#define HAVE_GMTIME_R 1
-
-/* Does your system have the mkstemp() call? */
-#define HAVE_MKSTEMP 1
-
-/* Does your system have regex.h */
-#define HAVE_REGEX 1
-
-/* Does your system have pthreads? */
-#define HAVE_PTHREADS 1
-
-/* Does your system have lockf ? */
-#define HAVE_LOCKF 1
-
-/* Does your system have Berkeley DB v2 ? */
-/* #undef HAVE_DB2 */
-
-/* Enable support for gettext message translation */
-/* #undef ENABLE_GETTEXT */
-
-
-/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
- */
-#define HAVE_DIRENT_H 1
-
-/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
-/* #undef HAVE_DOPRNT */
-
-/* Define to 1 if you have the `drand48' function. */
-#define HAVE_DRAND48 1
-
-/* Define to 1 if you have the <fcntl.h> header file. */
-#define HAVE_FCNTL_H 1
-
-/* Define to 1 if you have the `gettimeofday' function. */
-#define HAVE_GETTIMEOFDAY 1
-
-/* Define to 1 if you have the `gmtime_r' function. */
-#define HAVE_GMTIME_R 1
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#define HAVE_INTTYPES_H 1
-
-/* Define to 1 if you have the <limits.h> header file. */
-#define HAVE_LIMITS_H 1
-
-/* Define to 1 if you have the `localtime_r' function. */
-#define HAVE_LOCALTIME_R 1
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the `mktime' function. */
-#define HAVE_MKTIME 1
-
-/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
-/* #undef HAVE_NDIR_H */
-
-/* Define to 1 if you have the `putenv' function. */
-#define HAVE_PUTENV 1
-
-/* Define to 1 if you have the `rand' function. */
-#define HAVE_RAND 1
-
-/* Define to 1 if you have the `random' function. */
-#define HAVE_RANDOM 1
-
-/* Define to 1 if you have the <stdarg.h> header file. */
-#define HAVE_STDARG_H 1
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#define HAVE_STDINT_H 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the `strerror' function. */
-#define HAVE_STRERROR 1
-
-/* Define to 1 if you have the `strftime' function. */
-#define HAVE_STRFTIME 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the `strspn' function. */
-#define HAVE_STRSPN 1
-
-/* Define to 1 if you have the `strtod' function. */
-#define HAVE_STRTOD 1
-
-/* Define to 1 if you have the `strtok_r' function. */
-#define HAVE_STRTOK_R 1
-
-/* Define to 1 if you have the `strtol' function. */
-#define HAVE_STRTOL 1
-
-/* Define to 1 if you have the `strtoul' function. */
-#define HAVE_STRTOUL 1
-
-/* Define to 1 if `tm_zone' is member of `struct tm'. */
-#define HAVE_STRUCT_TM_TM_ZONE 1
-
-/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
- */
-/* #undef HAVE_SYS_DIR_H */
-
-/* Define to 1 if you have the <sys/ioctl.h> header file. */
-#define HAVE_SYS_IOCTL_H 1
-
-/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
- */
-/* #undef HAVE_SYS_NDIR_H */
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#define HAVE_SYS_TIME_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
-#define HAVE_SYS_WAIT_H 1
-
-/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use
- `HAVE_STRUCT_TM_TM_ZONE' instead. */
-#ifndef __CYGWIN__
-#define HAVE_TM_ZONE 1
-#endif
-
-/* Define to 1 if you don't have `tm_zone' but do have the external array
- `tzname'. */
-/* #undef HAVE_TZNAME */
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 1
-
-/* Define to 1 if you have the <varargs.h> header file. */
-/* #undef HAVE_VARARGS_H */
-
-/* Define to 1 if you have the `vprintf' function. */
-#define HAVE_VPRINTF 1
-
-/* Define to 1 if you have the `wait3' system call. Deprecated, you should no
- longer depend upon `wait3'. */
-#define HAVE_WAIT3 1
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT ""
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME ""
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING ""
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME ""
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION ""
-
-/* Define as the return type of signal handlers (`int' or `void'). */
-#define RETSIGTYPE void
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#define TIME_WITH_SYS_TIME 1
-
-/* Define to 1 if your <sys/time.h> declares `struct tm'. */
-/* #undef TM_IN_SYS_TIME */
-
-/* Define to empty if `const' does not conform to ANSI C. */
-/* #undef const */
-
-/* Define to `int' if <sys/types.h> does not define. */
-/* #undef mode_t */
-
-/* Define to `long' if <sys/types.h> does not define. */
-/* #undef off_t */
-
-/* Define to `int' if <sys/types.h> does not define. */
-/* #undef pid_t */
-
-/* Define to `unsigned' if <sys/types.h> does not define. */
-/* #undef size_t */
-
-#endif /* __CS_CONFIG_H_ */
diff --git a/cs_config.h.in b/cs_config.h.in
deleted file mode 100644
index 0918447..0000000
--- a/cs_config.h.in
+++ /dev/null
@@ -1,238 +0,0 @@
-/* cs_config.h.in. Generated from configure.in by autoheader. */
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-/*
- * config file
- */
-
-#ifndef __CS_CONFIG_H_
-#define __CS_CONFIG_H_ 1
-
-
-/* Enable support for HTML Compression (still must be enabled at run time) */
-#undef HTML_COMPRESSION
-
-/* Enable support for X Remote CGI Debugging */
-#undef ENABLE_REMOTE_DEBUG
-
-/********* SYSTEM CONFIG ***************************************************/
-/* autoconf/configure should figure all of these out for you */
-
-/* Does your system have the snprintf() call? */
-#undef HAVE_SNPRINTF
-
-/* Does your system have the vsnprintf() call? */
-#undef HAVE_VSNPRINTF
-
-/* Does your system have the strtok_r() call? */
-#undef HAVE_STRTOK_R
-
-/* Does your system have the localtime_r() call? */
-#undef HAVE_LOCALTIME_R
-
-/* Does your system have the gmtime_r() call? */
-#undef HAVE_GMTIME_R
-
-/* Does your system have the mkstemp() call? */
-#undef HAVE_MKSTEMP
-
-/* Does your system have regex.h */
-#undef HAVE_REGEX
-
-/* Does your system have pthreads? */
-#undef HAVE_PTHREADS
-
-/* Does your system have lockf ? */
-#undef HAVE_LOCKF
-
-/* Does your system have Berkeley DB v2 ? */
-#undef HAVE_DB2
-
-/* Enable support for gettext message translation */
-#undef ENABLE_GETTEXT
-
-
-/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
- */
-#undef HAVE_DIRENT_H
-
-/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
-#undef HAVE_DOPRNT
-
-/* Define to 1 if you have the `drand48' function. */
-#undef HAVE_DRAND48
-
-/* Define to 1 if you have the <fcntl.h> header file. */
-#undef HAVE_FCNTL_H
-
-/* Define to 1 if you have the <features.h> header file. */
-#undef HAVE_FEATURES_H
-
-/* Define to 1 if you have the `gettimeofday' function. */
-#undef HAVE_GETTIMEOFDAY
-
-/* Define to 1 if you have the `gmtime_r' function. */
-#undef HAVE_GMTIME_R
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if you have the <limits.h> header file. */
-#undef HAVE_LIMITS_H
-
-/* Define to 1 if you have the `localtime_r' function. */
-#undef HAVE_LOCALTIME_R
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define to 1 if you have the `mktime' function. */
-#undef HAVE_MKTIME
-
-/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
-#undef HAVE_NDIR_H
-
-/* Define to 1 if you have the `putenv' function. */
-#undef HAVE_PUTENV
-
-/* Define to 1 if you have the `rand' function. */
-#undef HAVE_RAND
-
-/* Define to 1 if you have the `random' function. */
-#undef HAVE_RANDOM
-
-/* Define to 1 if you have the <stdarg.h> header file. */
-#undef HAVE_STDARG_H
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the `strerror' function. */
-#undef HAVE_STRERROR
-
-/* Define to 1 if you have the `strftime' function. */
-#undef HAVE_STRFTIME
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the `strspn' function. */
-#undef HAVE_STRSPN
-
-/* Define to 1 if you have the `strtod' function. */
-#undef HAVE_STRTOD
-
-/* Define to 1 if you have the `strtok_r' function. */
-#undef HAVE_STRTOK_R
-
-/* Define to 1 if you have the `strtol' function. */
-#undef HAVE_STRTOL
-
-/* Define to 1 if you have the `strtoul' function. */
-#undef HAVE_STRTOUL
-
-/* Define to 1 if `tm_zone' is member of `struct tm'. */
-#undef HAVE_STRUCT_TM_TM_ZONE
-
-/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
- */
-#undef HAVE_SYS_DIR_H
-
-/* Define to 1 if you have the <sys/ioctl.h> header file. */
-#undef HAVE_SYS_IOCTL_H
-
-/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
- */
-#undef HAVE_SYS_NDIR_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#undef HAVE_SYS_TIME_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
-#undef HAVE_SYS_WAIT_H
-
-/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use
- `HAVE_STRUCT_TM_TM_ZONE' instead. */
-#undef HAVE_TM_ZONE
-
-/* Define to 1 if you don't have `tm_zone' but do have the external array
- `tzname'. */
-#undef HAVE_TZNAME
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define to 1 if you have the <varargs.h> header file. */
-#undef HAVE_VARARGS_H
-
-/* Define to 1 if you have the `vprintf' function. */
-#undef HAVE_VPRINTF
-
-/* Define to 1 if you have the `wait3' system call. Deprecated, you should no
- longer depend upon `wait3'. */
-#undef HAVE_WAIT3
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* Define as the return type of signal handlers (`int' or `void'). */
-#undef RETSIGTYPE
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#undef TIME_WITH_SYS_TIME
-
-/* Define to 1 if your <sys/time.h> declares `struct tm'. */
-#undef TM_IN_SYS_TIME
-
-/* Define to empty if `const' does not conform to ANSI C. */
-#undef const
-
-/* Define to `int' if <sys/types.h> does not define. */
-#undef mode_t
-
-/* Define to `long' if <sys/types.h> does not define. */
-#undef off_t
-
-/* Define to `int' if <sys/types.h> does not define. */
-#undef pid_t
-
-/* Define to `unsigned' if <sys/types.h> does not define. */
-#undef size_t
-
-#endif /* __CS_CONFIG_H_ */
diff --git a/csharp/CS.cs b/csharp/CS.cs
deleted file mode 100644
index dafe1ac..0000000
--- a/csharp/CS.cs
+++ /dev/null
@@ -1,149 +0,0 @@
-
-using System;
-using System.Runtime.InteropServices;
-
-namespace Clearsilver {
-
-// opaque types
-public unsafe struct HDF {};
-public unsafe struct NEOERR {};
-
-public unsafe class Hdf {
-
- [DllImport("libneo", EntryPoint="hdf_init")]
- private static extern unsafe NEOERR* hdf_init(HDF **foo);
-
- // NEOERR* hdf_set_value (HDF *hdf, char *name, char *value)
- [DllImport("libneo")]
- private static unsafe extern NEOERR* hdf_set_value(HDF *hdf,
- [MarshalAs(UnmanagedType.LPStr)]
- string name,
- [MarshalAs(UnmanagedType.LPStr)]
- string value);
-
- // char* hdf_get_value (HDF *hdf, char *name, char *defval)
-
- [DllImport("libneo")]
- [return: MarshalAs(UnmanagedType.LPStr)]
- private static unsafe extern string hdf_get_value(HDF *hdf,
- [MarshalAs(UnmanagedType.LPStr)]
- string name,
- [MarshalAs(UnmanagedType.LPStr)]
- string defval);
-
- // NEOERR* hdf_dump (HDF *hdf, char *prefix);
-
- [DllImport("libneo", EntryPoint="hdf_dump")]
- private static extern void hdf_dump(
- HDF *hdf,
- [MarshalAs(UnmanagedType.LPStr)]
- string prefix);
-
- // HDF* hdf_get_obj (HDF *hdf, char *name)
-
- [DllImport("libneo", EntryPoint="hdf_get_obj")]
- private static extern HDF* hdf_get_obj(
- HDF *hdf,
- [MarshalAs(UnmanagedType.LPStr)]
- string name);
-
-
- // -----------------------------------------------------------
-
- public HDF *hdf_root;
-
- public Hdf() {
- fixed (HDF **hdf_ptr = &hdf_root) {
- hdf_init(hdf_ptr);
- }
- // Console.WriteLine((int)hdf_root);
- }
-
- public void setValue(string name,string value) {
- hdf_set_value(hdf_root,name,value);
-
- }
- public string getValue(string name,string defvalue) {
- return hdf_get_value(hdf_root,name,defvalue);
- }
-
- public void test() {
- hdf_set_value(hdf_root,"b","1");
- // hdf_read_file(hdf_root,"test.hdf");
- // Console.WriteLine("b ", hdf_get_value(hdf_root,"b","5"));
- hdf_dump(hdf_root,null);
-
- // HDF *n = hdf_get_obj(hdf_root,"b");
- // Console.WriteLine("object name {0}",
- // Marshal.PtrToStringAnsi((IntPtr)n->name));
- }
-
-};
-
-unsafe struct CSPARSE {};
-
-public class CSTContext {
- unsafe CSPARSE *csp;
- unsafe public CSTContext(Hdf hdf) {
- fixed (CSPARSE **csp_ptr = &csp) {
- cs_init(csp_ptr, hdf.hdf_root);
- }
- }
-
- [DllImport("libneo")]
- extern static unsafe NEOERR *cs_init (CSPARSE **parse, HDF *hdf);
-
- public unsafe void parseFile(string filename) {
- cs_parse_file(csp,filename);
- }
-
- [DllImport("libneo")]
- extern static unsafe NEOERR *cs_parse_file (CSPARSE *parse,
- [MarshalAs(UnmanagedType.LPStr)]
- string path);
-
-// [DllImport("libneo")]
-// extern static unsafe NEOERR *cs_parse_string (CSPARSE *parse,
-// char *buf,
-// size_t blen);
-
-
- // NEOERR *cs_render (CSPARSE *parse, void *ctx, CSOUTFUNC cb);
- // typedef NEOERR* (*CSOUTFUNC)(void *ctx, char *more_str_bytes);
-
- [DllImport("libneo")]
- extern static unsafe NEOERR *cs_render (CSPARSE *parse,
- void *ctx,
- [MarshalAs(UnmanagedType.FunctionPtr)]
- CSOUTFUNC cb);
-
- private unsafe delegate NEOERR* CSOUTFUNC(void* ctx, sbyte* more_bytes);
-
- private class OutputBuilder {
- private string output = "";
- public unsafe NEOERR* handleOutput(void* ctx, sbyte* more_bytes) {
- // add the more_bytes to the current string buffer
-
- output += new String(more_bytes);
- // Console.WriteLine("handleOutput called");
- return null;
- }
- public string result() {
- return output;
- }
- }
-
- public unsafe string render() {
- OutputBuilder ob = new OutputBuilder();
- cs_render(csp,null,new CSOUTFUNC(ob.handleOutput));
- return ob.result();
- }
-
-
- [DllImport("libneo")]
- extern static unsafe void cs_destroy (CSPARSE **parse);
-
-};
-
-
-} // namespace Clearsilver
diff --git a/csharp/Makefile b/csharp/Makefile
deleted file mode 100644
index fd8e0f7..0000000
--- a/csharp/Makefile
+++ /dev/null
@@ -1,64 +0,0 @@
-
-# default values....
-
-CSHARP_CC=$(CSHARP_PATH)/bin/mcs
-MONO_JIT=$(CSHARP_PATH)/bin/mono
-
-# common build environment
-
-ifeq ($(NEOTONIC_ROOT),)
-NEOTONIC_ROOT = ..
-endif
-
-include $(NEOTONIC_ROOT)/rules.mk
-
-# our targets
-
-TARGETS = clearsilver.dll cstest.exe csperftest.exe testcs
-
-all: $(TARGETS)
-
-clearsilver.dll: CS.cs
- $(CSHARP_CC) -target:library -unsafe CS.cs -out:clearsilver.dll
-
-cstest.exe: clearsilver.dll ../dso/libneo.so cstest.cs
- $(CSHARP_CC) -r:clearsilver.dll -unsafe cstest.cs
-
-csperftest.exe: clearsilver.dll ../dso/libneo.so csperftest.cs
- $(CSHARP_CC) -r:clearsilver.dll -unsafe csperftest.cs
-
-perf: csperftest.exe
- export LD_LIBRARY_PATH=../dso; \
- $(MONO_JIT) csperftest.exe
-
-
-testcs: cstest.exe
- @echo "Running csharp test"
- @failed=0; \
- rm -f cstest.out; \
- export LD_LIBRARY_PATH=../dso; \
- $(MONO_JIT) cstest.exe > cstest.out; \
- diff cstest.out cstest.gold > /dev/null; \
- return_code=$$?; \
- if [ $$return_code -ne 0 ]; then \
- diff cstest.out cstest.gold > cstest.err; \
- echo "Failed csharp test: cstest.cs"; \
- echo " See cstest.out and cstest.err"; \
- failed=1; \
- fi; \
- if [ $$failed -eq 1 ]; then \
- exit 1; \
- fi;
- @echo "Passed csharp test"
-
-gold: cstest.exe
- export LD_LIBRARY_PATH=../dso; \
- $(MONO_JIT) cstest.exe > cstest.gold;
- @echo "Generated gold files"
-
-
-clean:
- rm -f core.*
-
-distclean:
- rm -f $(TARGETS) core.* Makefile.depend
diff --git a/csharp/README b/csharp/README
deleted file mode 100644
index dc837b9..0000000
--- a/csharp/README
+++ /dev/null
@@ -1,37 +0,0 @@
-#################################
-#
-# C# Clearsilver wrapper
-#
-# David Jeske
-#
-
-This wrapper was developed using the Mono project's C# implementation.
-It isn't done, and it hasn't yet been tested with the MS C#
-implementation, however, in theory it should work. Here are some salient
-ideas behind this implementation:
-
-- I don't use IntPtr, because it is basically a void* that
- removes type information and begs for coredumps to occur later.
-
-- I also don't use data marshaling for aggregate C-types. Instead I
- merely access the structure members directly from C# unsafe code, just
- like you would if this was C code.
-
-- The only data which is marshalled is function arguments and data which
- is pulled out of or put into C-structures.
-
-- There are many things still todo before this is a fully working
- module, but the basics are there.
-
-
-TODO:
-
-- more tests (look at ruby/test/hdftest.rb for an example)
-- do something better about mapping hdferror to exceptions
-- recheck the function prototypes to make sure I'm handling all
- arguments
-- handle next(), prev()
-- make iterator for child nodes
-- allow registration of upload callbacks and data-formatters from C#
-- open up access to other parts of cgi and util
-- sample code for using inside mod_mono, includign CSPage.cs
diff --git a/csharp/csperftest.cs b/csharp/csperftest.cs
deleted file mode 100644
index d7a07e3..0000000
--- a/csharp/csperftest.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-
-using Clearsilver;
-
-
-public class CSPerfTest {
- public delegate void test_function(int INDEX);
-
- public static void timefunk(String label, test_function f, int count) {
- int start, end, elapsed;
- start = Environment.TickCount;
- f(count);
- end = Environment.TickCount;
-
- elapsed = end-start;
-
- Console.WriteLine(label + " " + count + " elapsed: " + (elapsed / 1000.0));
- }
-
- public static unsafe int Main(string[] argv) {
- Console.WriteLine("C# Clearsilver wrapper performance test");
- Hdf h = new Hdf();
-
- h.setValue("foo.1","1");
- h.setValue("foo.2","2");
-
- int call_count = 100000;
- int start = Environment.TickCount;
- for (int i=0;i<call_count;i++) {
- h.setValue(String.Format("foo.{0}",i),"5");
- }
- int end = Environment.TickCount;
-
- Console.WriteLine("call count = {0}, time = {1} ms - time per call {2} ns",
- call_count, end-start, (((float)end-start)/call_count) * 1000);
-
-
- CSTContext cs = new CSTContext(h);
-// cs.parseFile("test.cst");
- Console.WriteLine(cs.render());
-
- return 0;
- }
-
-
-
-}
-
diff --git a/csharp/cstest.cs b/csharp/cstest.cs
deleted file mode 100644
index 5bfa699..0000000
--- a/csharp/cstest.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-
-using Clearsilver;
-
-public class CSTest {
- public static unsafe int Main(string[] argv) {
- Hdf h = new Hdf();
-
- h.setValue("foo.1","1");
- h.setValue("foo.2","2");
- Console.WriteLine("foo.2 = {0}", h.getValue("foo.2","def"));
-
- CSTContext cs = new CSTContext(h);
-// cs.parseFile("test.cst");
- Console.WriteLine(cs.render());
-
- return 0;
- }
-
-
-
-}
diff --git a/csharp/cstest.gold b/csharp/cstest.gold
deleted file mode 100644
index 84760a9..0000000
--- a/csharp/cstest.gold
+++ /dev/null
@@ -1,2 +0,0 @@
-foo.2 = 2
-
diff --git a/csharp/data_cstest.cst b/csharp/data_cstest.cst
deleted file mode 100644
index 9029ae6..0000000
--- a/csharp/data_cstest.cst
+++ /dev/null
@@ -1,5 +0,0 @@
-
-iterate foo elements:
-<?cs each:f = foo ?>
- <?cs var:name(f) + " = " + f ?>
-<?cs /each ?> \ No newline at end of file
diff --git a/csharp/data_cstest.hdf b/csharp/data_cstest.hdf
deleted file mode 100644
index 73cdb8b..0000000
--- a/csharp/data_cstest.hdf
+++ /dev/null
@@ -1 +0,0 @@
-a=1
diff --git a/dso/Makefile b/dso/Makefile
deleted file mode 100644
index b0e7bad..0000000
--- a/dso/Makefile
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-ifeq ($(NEOTONIC_ROOT),)
-NEOTONIC_ROOT = ..
-endif
-
-include $(NEOTONIC_ROOT)/rules.mk
-
-NEO_SO = libneo.so
-NEO_STATIC_LIBS =
-
-LIBS += $(DLIBS) $(DB2_LIB)
-
-
-TARGETS = $(NEO_SO) dsotest
-
-all: $(TARGETS)
-
-$(NEO_SO): $(NEO_STATIC_LIBS) $(DEP_LIBS) Makefile
- /usr/bin/ld -rpath ../libs -shared -o libneo.so -whole-archive ../libs/libneo_cgi.a ../libs/libneo_cs.a ../libs/libneo_utl.a -no-whole-archive $(LDFLAGS) $(LIBS)
-
-# $(LDSHARED) -o $@ $(LDFLAGS) -Wl,-whole-archive $(DLIBS)
-
-install: all
- $(NEOTONIC_ROOT)/mkinstalldirs $(DESTDIR)$(PYTHON_SITE)
- $(INSTALL) $(TARGETS) $(DESTDIR)$(PYTHON_SITE)
-
-dsotest: dsotest.c $(NEO_SO)
- gcc -o dsotest dsotest.c -lneo -L. -I..
-
-clean:
- $(RM) *.o
-
-distclean:
- $(RM) Makefile.depends $(TARGETS) *.o
diff --git a/dso/README b/dso/README
deleted file mode 100644
index d72c00d..0000000
--- a/dso/README
+++ /dev/null
@@ -1,11 +0,0 @@
-
-08-18-2003 blong
-
-This directory builds a "dynamic shared object" or dso. In theory, you
-could use this for various things, but in reality this is for the
-Mono/CSharp module, which requires a shared library loadable by the C#
-run time.
-
-Building this dso is very system specific, and this is currently very
-Linux specific at the moment. Patches to build this on other platforms
-are appreciated.
diff --git a/dso/dsotest.c b/dso/dsotest.c
deleted file mode 100644
index 8237bbe..0000000
--- a/dso/dsotest.c
+++ /dev/null
@@ -1,17 +0,0 @@
-
-#include <ClearSilver.h>
-
-
-int main() {
- HDF *hdf;
- NEOERR *err;
-
- err = hdf_init(&hdf);
-
- if (err) {
- printf("error: %s\n", err->desc);
- return 1;
- }
-
- printf("success: 0x%X\n", hdf);
-}
diff --git a/imd/0.gif b/imd/0.gif
deleted file mode 100644
index e801194..0000000
--- a/imd/0.gif
+++ /dev/null
Binary files differ
diff --git a/imd/1.gif b/imd/1.gif
deleted file mode 100644
index e801194..0000000
--- a/imd/1.gif
+++ /dev/null
Binary files differ
diff --git a/imd/2.gif b/imd/2.gif
deleted file mode 100644
index e801194..0000000
--- a/imd/2.gif
+++ /dev/null
Binary files differ
diff --git a/imd/3.gif b/imd/3.gif
deleted file mode 100644
index e801194..0000000
--- a/imd/3.gif
+++ /dev/null
Binary files differ
diff --git a/imd/4.gif b/imd/4.gif
deleted file mode 100644
index 8d3aa1a..0000000
--- a/imd/4.gif
+++ /dev/null
Binary files differ
diff --git a/imd/5.gif b/imd/5.gif
deleted file mode 100644
index e801194..0000000
--- a/imd/5.gif
+++ /dev/null
Binary files differ
diff --git a/imd/6.gif b/imd/6.gif
deleted file mode 100644
index a4e7299..0000000
--- a/imd/6.gif
+++ /dev/null
Binary files differ
diff --git a/imd/7.gif b/imd/7.gif
deleted file mode 100644
index 0f494d6..0000000
--- a/imd/7.gif
+++ /dev/null
Binary files differ
diff --git a/imd/Makefile b/imd/Makefile
deleted file mode 100644
index 100aa6b..0000000
--- a/imd/Makefile
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-ifeq ($(NEOTONIC_ROOT),)
-NEOTONIC_ROOT = ..
-endif
-
-include $(NEOTONIC_ROOT)/rules.mk
-
-IMD_EXE = imd.cgi
-IMD_SRC = imd.c
-IMD_OBJ = $(IMD_SRC:%.c=%.o)
-
-CFLAGS += -I/usr/local/include
-DLIBS += -lneo_cgi -lneo_cs -lneo_utl # -lefence
-LIBS += -L$(LIB_DIR) $(DLIBS) -L/usr/local/lib -lgd -ljpeg -lz
-
-TARGETS = $(IMD_EXE)
-
-all: $(TARGETS)
-
-$(IMD_EXE): $(IMD_OBJ) $(DEP_LIBS)
- $(LD) $@ $(IMD_OBJ) $(LIBS)
-
-clean:
- $(RM) *.o
-
-distclean:
- $(RM) Makefile.depends $(TARGETS) *.o
diff --git a/imd/README b/imd/README
deleted file mode 100644
index d983ae6..0000000
--- a/imd/README
+++ /dev/null
@@ -1,14 +0,0 @@
-
-To set up imd, you need to add the following directives to an apache
-conf file. If you have sufficient permissions, you can add these to the
-.htaccess files for an image directory:
-
-AddHandler cgi-script .cgi
-AddHandler imd-handler .imd
-Action imd-handler /url/path/to/imd.cgi
-
-Then, copy example.imd to somewhere in your URL space, and modify the
-settings in there. You will probably need to modify Template to point
-to the installed location of the imd.cs file. You can personalize the
-imd.cs file to personalize your image server.
-
diff --git a/imd/example.imd b/imd/example.imd
deleted file mode 100644
index 2ea709e..0000000
--- a/imd/example.imd
+++ /dev/null
@@ -1,22 +0,0 @@
-# Location of the image albums (an album is a directory of images
-# so this is a directory of directories of imaages)
-BASEDIR = /home/blong/images
-
-# Full Path to the CS template file used for display
-Template=/home/blong/public_html/Images/imd.cs
-
-# Scaling sizes. imd will scale the image to be at or below this size
-# Thumb is for the thumbnails, and Picture is for individual pictures
-ThumbWidth = 120
-ThumbHeight = 90
-PictureWidth = 600
-PictureHeight = 450
-
-# Number of thumbnails to show per page
-PerPage = 50
-
-# Assumed browser width for album show
-PageWidth = 640
-
-# Image Server Title
-Title = My Pictures
diff --git a/imd/imd.c b/imd/imd.c
deleted file mode 100644
index c6f3a6d..0000000
--- a/imd/imd.c
+++ /dev/null
@@ -1,1159 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-/* Bring in gd library functions */
-#include "gd.h"
-
-/* Bring in standard I/O so we can output the PNG to a file */
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <stdlib.h>
-#include <dirent.h>
-#include <errno.h>
-#include <sys/fcntl.h>
-#include <time.h>
-#include <ctype.h>
-
-#include "ClearSilver.h"
-
-/* from httpd util.c : made infamous with Roy owes Rob beer. */
-static char *months[] = {
- "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"
-};
-
-int find_month(char *mon) {
- register int x;
-
- for(x=0;x<12;x++)
- if(!strcmp(months[x],mon))
- return x;
- return -1;
-}
-
-int later_than(struct tm *lms, char *ims) {
- char *ip;
- char mname[256];
- int year = 0, month = 0, day = 0, hour = 0, min = 0, sec = 0, x;
-
- /* Whatever format we're looking at, it will start
- * with weekday. */
- /* Skip to first space. */
- if(!(ip = strchr(ims,' ')))
- return 0;
- else
- while(isspace(*ip))
- ++ip;
-
- if(isalpha(*ip)) {
- /* ctime */
- sscanf(ip,"%25s %d %d:%d:%d %d",mname,&day,&hour,&min,&sec,&year);
- }
- else if(ip[2] == '-') {
- /* RFC 850 (normal HTTP) */
- char t[256];
- sscanf(ip,"%s %d:%d:%d",t,&hour,&min,&sec);
- t[2] = '\0';
- day = atoi(t);
- t[6] = '\0';
- strcpy(mname,&t[3]);
- x = atoi(&t[7]);
- /* Prevent wraparound from ambiguity */
- if(x < 70)
- x += 100;
- year = 1900 + x;
- }
- else {
- /* RFC 822 */
- sscanf(ip,"%d %s %d %d:%d:%d",&day,mname,&year,&hour,&min,&sec);
- }
- month = find_month(mname);
-
- if((x = (1900+lms->tm_year) - year))
- return x < 0;
- if((x = lms->tm_mon - month))
- return x < 0;
- if((x = lms->tm_mday - day))
- return x < 0;
- if((x = lms->tm_hour - hour))
- return x < 0;
- if((x = lms->tm_min - min))
- return x < 0;
- if((x = lms->tm_sec - sec))
- return x < 0;
-
- return 1;
-}
-
-
-
-int gif_size (char *file, int *width, int *height)
-{
- UINT8 data[256];
- int fd;
- int blen;
-
- *width = 0; *height = 0;
- fd = open (file, O_RDONLY);
- if (fd == -1)
- return -1;
-
- blen = read(fd, data, sizeof(data));
- close(fd);
-
- if (blen < 10) return -1;
- if (strncmp(data, "GIF87a", 6) && strncmp(data, "GIF89a", 6))
- return -1;
-
- *width = data[6] + data[7]*256;
- *height = data[8] + data[9]*256;
-
- return 0;
-}
-
-int jpeg_size (char *file, int *width, int *height)
-{
- UINT8 data[64*1024];
- int blen;
- int fd;
- int pos;
- int length;
- UINT8 tag, marker;
-
-
- *width = 0; *height = 0;
- fd = open (file, O_RDONLY);
- if (fd == -1)
- return -1;
-
- blen = read(fd, data, sizeof(data));
- close(fd);
- pos = 2;
- while (pos+8 < blen)
- {
- tag = data[pos+0];
- if (tag != 0xff) return -1;
- marker = data[pos+1];
- length = data[pos+2] * 256 + data[pos+3] + 2;
- if (marker >= 0xc0 && marker <= 0xcf && marker != 0xc4 &&
- marker != 0xc8 && marker != 0xcc)
- {
- *height = data[pos+5] * 256 + data[pos+6];
- *width = data[pos+7] * 256 + data[pos+8];
- ne_warn("%s: %dx%d", file, *width, *height);
- return 0;
- }
- pos += length;
- }
- return -1;
-}
-
-int isdir(char *dir) {
- struct stat statinfo;
- if ( stat(dir, &statinfo) != 0) {
- return 0;
- }
-
- return S_ISDIR(statinfo.st_mode);
-}
-
-int create_directories(char *fullpath) {
- char s[4000];
- char *last_slash;
- int last_slash_pos;
-
- if ((fullpath == NULL) || (strlen(fullpath) > 4000)) {
- return 1;
- }
-
- last_slash = strrchr(fullpath,'/');
- last_slash_pos = (last_slash - fullpath);
- /* fprintf(stderr,"dira(%d): %s\n", last_slash_pos,fullpath); */
-
- if (last_slash_pos > 2) {
- strncpy(s,fullpath,last_slash_pos);
- s[last_slash_pos] = 0;
- /* fprintf(stderr,"dir: %s\n", s); */
-
- if (!isdir(s)) {
- char s2[4000];
- sprintf(s2,"mkdir -p %s", s);
- return system(s2);
- }
-
- } else {
- return 1;
- }
-
- return 0;
-}
-
-NEOERR *rotate_image(char *path, char *file, int degree, char *rpath)
-{
- char cmd[256];
- char nfile[_POSIX_PATH_MAX];
- char ofile[_POSIX_PATH_MAX];
- char *ch, *opt;
- int is_jpeg = 0;
- struct stat s;
- int r;
-
- snprintf (ofile, sizeof(ofile), "%s/%s", path, file);
- snprintf (rpath, _POSIX_PATH_MAX, "%s/%s", path, file);
- ch = strrchr(rpath, '.');
- if ((!strcasecmp(ch, ".jpg")) ||
- (!strcasecmp(ch, ".jpeg")) ||
- (!strcasecmp(ch, ".thm")))
- {
- is_jpeg = 1;
- }
- else if (strcasecmp(ch, ".gif"))
- {
- return nerr_raise(NERR_ASSERT, "Only support gif/jpeg for rotation, ext %s",
- ch);
- }
- *ch = '\0';
- if (degree == 90)
- {
- strcat(rpath, "_r");
- opt = "-cw";
- }
- else if (degree == -90)
- {
- strcat(rpath, "_l");
- opt = "-ccw";
- }
- else if (degree == 180)
- {
- strcat(rpath, "_u");
- opt = "-rotate180";
- }
- else
- {
- return nerr_raise(NERR_ASSERT, "currently only support 90/-90/180 rotations");
- }
- if (is_jpeg)
- {
- strcat(rpath, ".jpg");
- snprintf(cmd, sizeof(cmd), "djpeg -pnm %s | pnmflip %s | cjpeg -quality 85 > %s", ofile, opt, rpath);
- }
- else
- {
- strcat(rpath, ".gif");
- snprintf(cmd, sizeof(cmd), "giftopnm %s | pnmflip %s | ppmtogif > %s", ofile, opt, rpath);
- }
- /* already exists? */
- if (!stat(rpath, &s))
- {
- return STATUS_OK;
- }
- r = system(cmd);
- if (r) return nerr_raise_errno (NERR_SYSTEM, "%s returned %d", cmd, r);
- /* always save off the old file */
- snprintf (nfile, sizeof(nfile), "%s/%s.orig", path, file);
- if (stat(nfile, &s))
- {
- if (link(ofile, nfile))
- return nerr_raise_errno (NERR_SYSTEM, "Unable to link %s -> %s", ofile, nfile);
- unlink(ofile);
- }
- return STATUS_OK;
-}
-
-NEOERR *scale_and_display_image(char *fname,int maxW,int maxH,char *cachepath,
- int quality)
-{
- NEOERR *err = STATUS_OK;
- /* Declare the image */
- gdImagePtr src_im = 0;
- /* Declare input file */
- FILE *infile=0, *cachefile=0;
- int srcX,srcY,srcW,srcH;
- FILE *dispfile=0;
- struct stat s;
-
- /* if we can open the cachepath, then just print it */
- if (!stat(cachepath, &s) && s.st_size)
- cachefile = fopen(cachepath,"rb");
- if (cachefile) {
- /* we should probably stat the files and make sure the thumbnail
- is current */
- /* fprintf(stderr,"using cachefile: %s\n",cachepath); */
- dispfile = cachefile;
- } else {
- char cmd[1024];
- int factor=1;
- int l;
- int is_jpeg = 0, is_gif = 0;
-
- l = strlen(fname);
- if ((l>4 && !strcasecmp(fname+l-4, ".jpg")) ||
- (l>4 && !strcasecmp(fname+l-4, ".thm")) ||
- (l>5 && !strcasecmp(fname+l-5, ".jpeg")))
- is_jpeg = 1;
- else if (l>4 && !strcasecmp(fname+l-4, ".gif"))
- is_gif = 1;
-
-
- if (is_jpeg)
- {
- if (!quality)
- {
- if (!jpeg_size (fname, &srcW, &srcH))
- {
- if ((srcW > maxW) || (srcH > maxH))
- {
- factor = 2;
- if (srcW / factor > maxW)
- {
- factor = 4;
- if (srcW / factor > maxW)
- factor = 8;
- }
- }
- }
-
- /* ne_warn("factor %d\n", factor); */
- snprintf (cmd, sizeof(cmd), "/usr/bin/djpeg -fast -scale 1/%d '%s' | /usr/bin/cjpeg -quality 60 -progressive -dct fast -outfile '%s'", factor, fname, cachepath);
-
- create_directories(cachepath);
- system(cmd);
- if (!stat(cachepath, &s) && s.st_size)
- cachefile = fopen(cachepath,"rb");
- else
- ne_warn("external command failed to create file\n");
- }
- if (cachefile) {
- dispfile = cachefile;
-
- } else /* no cachefile */ {
-
-
- /* fprintf(stderr,"reading image\n"); */
- /* Read the image in */
- infile = fopen(fname,"rb");
- src_im = gdImageCreateFromJpeg(infile);
- srcX=0; srcY=0; srcW=src_im->sx; srcH=src_im->sy;
-
-
- /* figure out if we need to scale it */
-
- if ((maxW && srcW > maxW) || (maxH && srcH > maxH)) {
- /* scale paramaters */
- int dstX,dstY,dstW,dstH;
- /* Declare output file */
- FILE *jpegout;
- gdImagePtr dest_im;
- float srcAspect,dstAspect;
-
- /* create the destination image */
-
- dstX=0; dstY=0;
-
-
- srcAspect = ((float)srcW/(float)srcH);
- dstAspect = ((float)maxW/(float)maxH);
-
- if (srcAspect == dstAspect) {
- /* they are the same aspect ratio */
- dstW = maxW;
- dstH = maxH;
- } else if ( srcAspect > dstAspect ) {
- /* if the src image has wider aspect ratio than the max */
- dstW = maxW;
- dstH = (int) ( ((float)dstW/(float)srcW) * srcH );
- } else {
- /* if the src image has taller aspect ratio than the max */
- dstH = maxW;
- dstW = (int) ( ((float)dstH/(float)srcH) * srcW );
- }
-
-#ifdef GD2_VERS
- dest_im = gdImageCreateTrueColor(dstW,dstH);
-#else
- dest_im = gdImageCreate(dstW,dstH);
-#endif
-
- /* fprintf(stderr,"scaling to (%d,%d)\n",dstW,dstH); */
-
- /* Scale it to the destination image */
-
- gdImageCopyResized(dest_im,src_im,dstX,dstY,srcX,srcY,dstW,dstH,srcW,srcH);
-
- /* fprintf(stderr,"scaling finished\n"); */
-
- /* write the output image */
- create_directories(cachepath);
- jpegout = fopen(cachepath,"wb+");
- if (!jpegout) {
- jpegout = fopen("/tmp/foobar.jpg","wb+");
- }
- if (jpegout) {
- gdImageJpeg(dest_im,jpegout,-1);
- fflush(jpegout);
-
- /* now print that data out the stream */
- dispfile = jpegout;
- } else {
- return nerr_raise_errno(NERR_IO, "Unable to create output file: %s", cachepath);
- }
-
-
- gdImageDestroy(dest_im);
-
- } else {
- /* just print the input file because it's small enough */
- dispfile = infile;
- }
-
- }
- }
- else if (is_gif)
- {
- float scale = 1.0;
- if (!gif_size (fname, &srcW, &srcH))
- {
- if ((srcW > maxW) || (srcH > maxH))
- {
- scale = 0.5;
- if (srcW * scale > maxW)
- {
- scale = 0.25;
- if (srcW * scale > maxW)
- factor = 0.125;
- }
- }
- }
-
- if (scale < 1.0)
- {
- snprintf (cmd, sizeof(cmd), "/usr/bin/giftopnm '%s' | /usr/bin/pnmscale %5.3f | ppmquant 256 | ppmtogif > '%s'", fname, scale, cachepath);
-
- create_directories(cachepath);
- system(cmd);
- dispfile = fopen(cachepath,"rb");
- if (dispfile == NULL)
- return nerr_raise_errno(NERR_IO, "Unable to open file: %s", cachepath);
-
- }
- else
- {
- dispfile = fopen(fname, "rb");
- if (dispfile == NULL)
- return nerr_raise_errno(NERR_IO, "Unable to open file: %s", fname);
- }
- }
- else {
- dispfile = fopen(fname,"rb");
- }
- }
-
- /* the data in "dispfile" is going to be printed now */
- {
-
- char buf[8192];
- int count;
-
- if (!fstat(fileno(dispfile), &s) && s.st_size)
- {
- cgiwrap_writef("Content-Length: %ld\n\n", s.st_size);
- }
- else
- {
- cgiwrap_writef("\n");
- }
-
- fseek(dispfile,0,SEEK_SET);
-
- do {
- count = fread(buf,1,sizeof(buf),dispfile);
- if (count > 0) {
- err = cgiwrap_write(buf,count);
- }
- } while (count > 0);
-
- }
-
- if (dispfile) fclose(dispfile);
- if (src_im) gdImageDestroy(src_im);
-
- return nerr_pass(err);
-}
-
-NEOERR *load_images (char *path, ULIST **rfiles, char *partial, int descend)
-{
- NEOERR *err = STATUS_OK;
- DIR *dp;
- struct dirent *de;
- int is_jpeg, is_gif, l;
- char fpath[_POSIX_PATH_MAX];
- char ppath[_POSIX_PATH_MAX];
- ULIST *files = NULL;
-
- if ((dp = opendir (path)) == NULL)
- {
- return nerr_raise(NERR_IO, "Unable to opendir %s: [%d] %s", path, errno,
- strerror(errno));
- }
-
- if (rfiles == NULL || *rfiles == NULL)
- {
- err = uListInit(&files, 50, 0);
- if (err) return nerr_pass(err);
- *rfiles = files;
- }
- else
- {
- files = *rfiles;
- }
-
- while ((de = readdir (dp)) != NULL)
- {
- if (de->d_name[0] != '.')
- {
- snprintf(fpath, sizeof(fpath), "%s/%s", path, de->d_name);
- if (partial)
- {
- snprintf(ppath, sizeof(ppath), "%s/%s", partial, de->d_name);
- }
- else
- {
- strncpy(ppath, de->d_name, sizeof(ppath));
- }
- if (descend && isdir(fpath))
- {
- err = load_images(fpath, rfiles, ppath, descend);
- if (err) break;
- }
- else
- {
- l = strlen(de->d_name);
- is_jpeg = 0; is_gif = 0;
-
- if ((l>4 && !strcasecmp(de->d_name+l-4, ".jpg")) ||
- (l>4 && !strcasecmp(de->d_name+l-4, ".thm")) ||
- (l>5 && !strcasecmp(de->d_name+l-5, ".jpeg")))
- is_jpeg = 1;
- else if (l>4 && !strcasecmp(de->d_name+l-4, ".gif"))
- is_gif = 1;
-
- if (is_gif || is_jpeg)
- {
- err = uListAppend(files, strdup(ppath));
- if (err) break;
- }
- }
- }
- }
- closedir(dp);
- if (err)
- {
- uListDestroy(&files, ULIST_FREE);
- }
- else
- {
- *rfiles = files;
- }
- return nerr_pass(err);
-}
-
-NEOERR *export_image(CGI *cgi, char *prefix, char *path, char *file)
-{
- NEOERR *err;
- char buf[256];
- char num[20];
- int i = 0;
- int r, l;
- int width, height;
- char ipath[_POSIX_PATH_MAX];
- int is_jpeg = 0, is_gif = 0, is_thm = 0;
-
- l = strlen(file);
- if ((l>4 && !strcasecmp(file+l-4, ".jpg")) ||
- (l>5 && !strcasecmp(file+l-5, ".jpeg")))
- is_jpeg = 1;
- else if (l>4 && !strcasecmp(file+l-4, ".gif"))
- is_gif = 1;
- else if (l>4 && !strcasecmp(file+l-4, ".thm"))
- is_thm = 1;
-
- snprintf (buf, sizeof(buf), "%s.%d", prefix, i);
- err = hdf_set_value (cgi->hdf, prefix, file);
- if (err != STATUS_OK) return nerr_pass(err);
- snprintf (ipath, sizeof(ipath), "%s/%s", path, file);
- if (is_jpeg || is_thm)
- r = jpeg_size(ipath, &width, &height);
- else
- r = gif_size(ipath, &width, &height);
- if (!r)
- {
- snprintf (buf, sizeof(buf), "%s.width", prefix);
- snprintf (num, sizeof(num), "%d", width);
- err = hdf_set_value (cgi->hdf, buf, num);
- if (err != STATUS_OK) return nerr_pass(err);
- snprintf (buf, sizeof(buf), "%s.height", prefix);
- snprintf (num, sizeof(num), "%d", height);
- err = hdf_set_value (cgi->hdf, buf, num);
- if (err != STATUS_OK) return nerr_pass(err);
- }
- if (is_thm)
- {
- strcpy(ipath, file);
- strcpy(ipath+l-4, ".avi");
- snprintf(buf, sizeof(buf), "%s.avi", prefix);
- err = hdf_set_value (cgi->hdf, buf, ipath);
- if (err != STATUS_OK) return nerr_pass(err);
- }
- return STATUS_OK;
-}
-
-NEOERR *scale_images (CGI *cgi, char *prefix, int width, int height, int force)
-{
- NEOERR *err;
- char num[20];
- HDF *obj;
- int i, x;
- int factor;
-
- obj = hdf_get_obj (cgi->hdf, prefix);
- if (obj) obj = hdf_obj_child (obj);
- while (obj)
- {
- factor = 1;
- i = hdf_get_int_value(obj, "height", -1);
- if (i != -1)
- {
- x = i;
- while (x > height)
- {
- /* factor = factor * 2;*/
- factor++;
- x = i / factor;
- }
- snprintf (num, sizeof(num), "%d", x);
- err = hdf_set_value (obj, "height", num);
- if (err != STATUS_OK) return nerr_pass (err);
-
- i = hdf_get_int_value(obj, "width", -1);
- if (i != -1)
- {
- i = i / factor;
- snprintf (num, sizeof(num), "%d", i);
- err = hdf_set_value (obj, "width", num);
- if (err != STATUS_OK) return nerr_pass (err);
- }
- }
- else
- {
- snprintf (num, sizeof(num), "%d", height);
- err = hdf_set_value (obj, "height", num);
- if (err != STATUS_OK) return nerr_pass (err);
- snprintf (num, sizeof(num), "%d", width);
- err = hdf_set_value (obj, "width", num);
- if (err != STATUS_OK) return nerr_pass (err);
- }
- obj = hdf_obj_next(obj);
- }
- return STATUS_OK;
-}
-
-int alpha_sort(const void *a, const void *b)
-{
- char **sa = (char **)a;
- char **sb = (char **)b;
-
- /* ne_warn("%s %s: %d", *sa, *sb, strcmp(*sa, *sb)); */
-
- return strcmp(*sa, *sb);
-}
-
-static NEOERR *export_album_path(CGI *cgi, char *album, char *prefix)
-{
- NEOERR *err = STATUS_OK;
- char *p, *l;
- int n = 0;
- char buf[256];
-
- l = album;
- p = strchr(album, '/');
-
- while (p != NULL)
- {
- *p = '\0';
- snprintf(buf, sizeof(buf), "%s.%d", prefix, n);
- err = hdf_set_value(cgi->hdf, buf, l);
- if (err) break;
- snprintf(buf, sizeof(buf), "%s.%d.path", prefix, n++);
- err = hdf_set_value(cgi->hdf, buf, album);
- if (err) break;
- *p = '/';
- l = p+1;
- p = strchr(l, '/');
- }
- if (err) return nerr_pass(err);
- if (strlen(l))
- {
- snprintf(buf, sizeof(buf), "%s.%d", prefix, n);
- err = hdf_set_value(cgi->hdf, buf, l);
- if (err) return nerr_pass(err);
- snprintf(buf, sizeof(buf), "%s.%d.path", prefix, n++);
- err = hdf_set_value(cgi->hdf, buf, album);
- if (err) return nerr_pass(err);
- }
-
- return STATUS_OK;
-}
-
-
-NEOERR *dowork_picture (CGI *cgi, char *album, char *picture)
-{
- NEOERR *err = STATUS_OK;
- char *base, *name;
- char path[_POSIX_PATH_MAX];
- char buf[256];
- int i, x, factor, y;
- int thumb_width, thumb_height;
- int pic_width, pic_height;
- ULIST *files = NULL;
- char t_album[_POSIX_PATH_MAX];
- char t_pic[_POSIX_PATH_MAX];
- char nfile[_POSIX_PATH_MAX];
- char *ch;
- char *avi = NULL;
- int rotate;
-
- ch = strrchr(picture, '/');
- if (ch != NULL)
- {
- *ch = '\0';
- snprintf(t_album, sizeof(t_album), "%s/%s", album, picture);
- *ch = '/';
- strncpy(t_pic, ch+1, sizeof(t_pic));
- picture = t_pic;
- album = t_album;
- }
-
- base = hdf_get_value (cgi->hdf, "BASEDIR", NULL);
- if (base == NULL)
- {
- cgi_error (cgi, "No BASEDIR in imd file");
- return nerr_raise(CGIFinished, "Finished");
- }
-
- thumb_width = hdf_get_int_value (cgi->hdf, "ThumbWidth", 120);
- thumb_height = hdf_get_int_value (cgi->hdf, "ThumbWidth", 90);
- pic_width = hdf_get_int_value (cgi->hdf, "PictureWidth", 120);
- pic_height = hdf_get_int_value (cgi->hdf, "PictureWidth", 90);
-
- err = hdf_set_value (cgi->hdf, "Context", "picture");
- if (err != STATUS_OK) return nerr_pass(err);
-
- snprintf (path, sizeof(path), "%s/%s", base, album);
- rotate = hdf_get_int_value(cgi->hdf, "Query.rotate", 0);
- if (rotate)
- {
- err = rotate_image(path, picture, rotate, nfile);
- if (err) return nerr_pass(err);
- picture = strrchr(nfile, '/') + 1;
- }
-
- err = hdf_set_value (cgi->hdf, "Album", album);
- if (err != STATUS_OK) return nerr_pass(err);
- err = hdf_set_value (cgi->hdf, "Album.Raw", album);
- if (err != STATUS_OK) return nerr_pass(err);
- err = export_album_path(cgi, album, "Album.Path");
- if (err) return nerr_pass(err);
- err = hdf_set_value (cgi->hdf, "Picture", picture);
- if (err != STATUS_OK) return nerr_pass(err);
-
- err = load_images(path, &files, NULL, 0);
- if (err != STATUS_OK) return nerr_pass(err);
- err = uListSort(files, alpha_sort);
- if (err != STATUS_OK) return nerr_pass(err);
-
- i = -1;
- for (x = 0; x < uListLength(files); x++)
- {
- err = uListGet(files, x, (void *)&name);
- if (err) break;
- if (!strcmp(name, picture))
- {
- i = x;
- break;
- }
- }
- if (i != -1)
- {
- for (x = 2; x > 0; x--)
- {
- if (i - x < 0) continue;
- err = uListGet(files, i-x, (void *)&name);
- if (err) break;
- snprintf(buf, sizeof(buf), "Show.%d", i-x);
- err = export_image(cgi, buf, path, name);
- if (err) break;
- }
- for (x = 0; x < 3; x++)
- {
- if (i + x > uListLength(files)) break;
- err = uListGet(files, i+x, (void *)&name);
- if (err) break;
- snprintf(buf, sizeof(buf), "Show.%d", i+x);
- err = export_image(cgi, buf, path, name);
- if (err) break;
- }
- snprintf (buf, sizeof(buf), "Show.%d.width", i);
- x = hdf_get_int_value (cgi->hdf, buf, -1);
- if (x != -1)
- {
- factor = 1;
- y = x;
- while (y > pic_width)
- {
- factor = factor * 2;
- /* factor++; */
- y = x / factor;
- ne_warn("factor = %d, y = %d", factor, y);
- }
- snprintf (buf, sizeof(buf), "%d", y);
- hdf_set_value (cgi->hdf, "Picture.width", buf);
- snprintf (buf, sizeof(buf), "Show.%d.height", i);
- x = hdf_get_int_value (cgi->hdf, buf, -1);
- y = x / factor;
- snprintf (buf, sizeof(buf), "%d", y);
- hdf_set_value (cgi->hdf, "Picture.height", buf);
- }
- else
- {
- snprintf (buf, sizeof(buf), "%d", pic_width);
- hdf_set_value (cgi->hdf, "Picture.width", buf);
- snprintf (buf, sizeof(buf), "%d", pic_height);
- hdf_set_value (cgi->hdf, "Picture.height", buf);
- }
- snprintf (buf, sizeof(buf), "Show.%d.avi", i);
- avi = hdf_get_value (cgi->hdf, buf, NULL);
- if (avi)
- {
- err = hdf_set_value(cgi->hdf, "Picture.avi", avi);
- }
-
- err = scale_images (cgi, "Show", thumb_width, thumb_height, 0);
- }
- uListDestroy(&files, ULIST_FREE);
-
- return nerr_pass(err);
-}
-
-static int is_album(void *rock, char *filename)
-{
- char path[_POSIX_PATH_MAX];
- char *prefix = (char *)rock;
-
- if (filename[0] == '.') return 0;
- snprintf(path, sizeof(path), "%s/%s", prefix, filename);
- if (isdir(path)) return 1;
- return 0;
-}
-
-NEOERR *dowork_album_overview (CGI *cgi, char *album)
-{
- NEOERR *err = STATUS_OK;
- DIR *dp;
- struct dirent *de;
- char path[_POSIX_PATH_MAX];
- char buf[256];
- int i = 0, x, y;
- int thumb_width, thumb_height;
- ULIST *files = NULL;
- ULIST *albums = NULL;
- char *name;
-
- thumb_width = hdf_get_int_value (cgi->hdf, "ThumbWidth", 120);
- thumb_height = hdf_get_int_value (cgi->hdf, "ThumbWidth", 90);
-
- err = ne_listdir_fmatch(album, &albums, is_album, album);
- if (err) return nerr_pass(err);
-
-
- err = uListSort(albums, alpha_sort);
- if (err) return nerr_pass(err);
- for (y = 0; y < uListLength(albums); y++)
- {
- err = uListGet(albums, y, (void *)&name);
- if (err) break;
-
- snprintf(path, sizeof(path), "%s/%s", album, name);
- snprintf(buf, sizeof(buf), "Albums.%d", i);
- err = hdf_set_value (cgi->hdf, buf, name);
- if (err != STATUS_OK) break;
- err = load_images(path, &files, NULL, 1);
- if (err != STATUS_OK) break;
- err = uListSort(files, alpha_sort);
- if (err != STATUS_OK) break;
- snprintf(buf, sizeof(buf), "Albums.%d.Count", i);
- err = hdf_set_int_value(cgi->hdf, buf, uListLength(files));
- if (err != STATUS_OK) break;
- for (x = 0; (x < 4) && (x < uListLength(files)); x++)
- {
- err = uListGet(files, x, (void *)&name);
- if (err) break;
- snprintf(buf, sizeof(buf), "Albums.%d.Images.%d", i, x);
- err = export_image(cgi, buf, path, name);
- if (err) break;
- }
- uListDestroy(&files, ULIST_FREE);
- if (err != STATUS_OK) break;
- snprintf(buf, sizeof(buf), "Albums.%d.Images", i);
- err = scale_images (cgi, buf, thumb_width, thumb_height, 0);
- if (err != STATUS_OK) break;
- i++;
- }
- return nerr_pass(err);
-}
-
-NEOERR *dowork_album (CGI *cgi, char *album)
-{
- NEOERR *err;
- char *base;
- char buf[256];
- char path[_POSIX_PATH_MAX];
- int thumb_width, thumb_height;
- int per_page, start, next, prev, last;
- ULIST *files = NULL;
- char *name;
- int x;
-
- base = hdf_get_value (cgi->hdf, "BASEDIR", NULL);
- if (base == NULL)
- {
- cgi_error (cgi, "No BASEDIR in imd file");
- return nerr_raise(CGIFinished, "Finished");
- }
- thumb_width = hdf_get_int_value (cgi->hdf, "ThumbWidth", 120);
- thumb_height = hdf_get_int_value (cgi->hdf, "ThumbWidth", 90);
- per_page = hdf_get_int_value (cgi->hdf, "PerPage", 50);
- start = hdf_get_int_value (cgi->hdf, "Query.start", 0);
-
- err = hdf_set_value (cgi->hdf, "Album", album);
- if (err != STATUS_OK) return nerr_pass(err);
- err = hdf_set_value (cgi->hdf, "Album.Raw", album);
- if (err != STATUS_OK) return nerr_pass(err);
- err = export_album_path(cgi, album, "Album.Path");
- if (err) return nerr_pass(err);
-
-
- err = hdf_set_value (cgi->hdf, "Context", "album");
- if (err != STATUS_OK) return nerr_pass(err);
-
-
- snprintf (path, sizeof(path), "%s/%s", base, album);
- err = dowork_album_overview(cgi, path);
- if (err != STATUS_OK) return nerr_pass(err);
-
- err = load_images(path, &files, NULL, 0);
- if (err != STATUS_OK) return nerr_pass (err);
- err = uListSort(files, alpha_sort);
- if (err != STATUS_OK) return nerr_pass (err);
- err = hdf_set_int_value(cgi->hdf, "Album.Count", uListLength(files));
- if (err != STATUS_OK) return nerr_pass (err);
- if (start > uListLength(files)) start = 0;
- next = start + per_page;
- if (next > uListLength(files)) next = uListLength(files);
- prev = start - per_page;
- if (prev < 0) prev = 0;
- last = uListLength(files) - per_page;
- if (last < 0) last = 0;
- err = hdf_set_int_value(cgi->hdf, "Album.Start", start);
- if (err != STATUS_OK) return nerr_pass (err);
- err = hdf_set_int_value(cgi->hdf, "Album.Next", next);
- if (err != STATUS_OK) return nerr_pass (err);
- err = hdf_set_int_value(cgi->hdf, "Album.Prev", prev);
- if (err != STATUS_OK) return nerr_pass (err);
- err = hdf_set_int_value(cgi->hdf, "Album.Last", last);
- if (err != STATUS_OK) return nerr_pass (err);
- for (x = start; x < next; x++)
- {
- err = uListGet(files, x, (void *)&name);
- if (err) break;
- snprintf(buf, sizeof(buf), "Images.%d", x);
- err = export_image(cgi, buf, path, name);
- if (err) break;
- }
- uListDestroy(&files, ULIST_FREE);
- if (err != STATUS_OK) return nerr_pass (err);
- err = scale_images (cgi, "Images", thumb_width, thumb_height, 0);
- if (err != STATUS_OK) return nerr_pass (err);
- return STATUS_OK;
-}
-
-NEOERR *dowork_image (CGI *cgi, char *image)
-{
- NEOERR *err = STATUS_OK;
- int maxW = 0, maxH = 0;
- char *basepath = "";
- char *cache_basepath = "/tmp/.imgcache/";
- char srcpath[_POSIX_PATH_MAX] = "";
- char cachepath[_POSIX_PATH_MAX] = "";
- char buf[256];
- char *if_mod;
- int i, l, quality;
- struct stat s;
- struct tm *t;
-
- if ((i = hdf_get_int_value(cgi->hdf, "Query.width", 0)) != 0) {
- maxW = i;
- }
-
- if ((i = hdf_get_int_value(cgi->hdf, "Query.height", 0)) != 0) {
- maxH = i;
- }
- quality = hdf_get_int_value(cgi->hdf, "Query.quality", 0);
-
- if_mod = hdf_get_value(cgi->hdf, "HTTP.IfModifiedSince", NULL);
-
- basepath = hdf_get_value(cgi->hdf, "BASEDIR", NULL);
- if (basepath == NULL)
- {
- cgi_error (cgi, "No BASEDIR in imd file");
- return nerr_raise(CGIFinished, "Finished");
- }
-
- snprintf (srcpath, sizeof(srcpath), "%s/%s", basepath, image);
- snprintf (cachepath, sizeof(cachepath), "%s/%dx%d/%s", cache_basepath,
- maxW, maxH,image);
-
- if (stat(srcpath, &s))
- {
- cgiwrap_writef("Status: 404\nContent-Type: text/html\n\n");
- cgiwrap_writef("File %s not found.", srcpath);
- return nerr_raise_errno(NERR_IO, "Unable to stat file %s", srcpath);
- }
-
- t = gmtime(&(s.st_mtime));
- if (if_mod && later_than(t, if_mod))
- {
- cgiwrap_writef("Status: 304\nContent-Type: text/html\n\n");
- cgiwrap_writef("Use Local Copy");
- return STATUS_OK;
- }
-
- /* fprintf(stderr,"cachepath: %s\n",cachepath); */
-
- ne_warn("srcpath: %s", srcpath);
- l = strlen(srcpath);
- if ((l>4 && !strcasecmp(srcpath+l-4, ".jpg")) ||
- (l>4 && !strcasecmp(srcpath+l-4, ".thm")) ||
- (l>5 && !strcasecmp(srcpath+l-5, ".jpeg")))
- cgiwrap_writef("Content-Type: image/jpeg\n");
- else if (l>4 && !strcasecmp(srcpath+l-4, ".gif"))
- cgiwrap_writef("Content-Type: image/gif\n");
- else if (l>4 && !strcasecmp(srcpath+l-4, ".avi"))
- {
- ne_warn("found avi");
- cgiwrap_writef("Content-Type: video/x-msvideo\n");
- }
- t = gmtime(&(s.st_mtime));
- strftime(buf, sizeof(buf), "%a, %d %b %Y %H:%M:%S GMT", t);
- cgiwrap_writef("Last-modified: %s\n", buf);
-
- err = scale_and_display_image(srcpath,maxW,maxH,cachepath,quality);
- return nerr_pass(err);
-}
-
-int main(int argc, char **argv, char **envp)
-{
- NEOERR *err;
- CGI *cgi;
- char *image;
- char *album;
- char *imd_file;
- char *cs_file;
- char *picture;
-
- ne_warn("Starting IMD");
- cgi_debug_init (argc,argv);
- cgiwrap_init_std (argc, argv, envp);
-
- nerr_init();
-
- ne_warn("CGI init");
- err = cgi_init(&cgi, NULL);
- if (err != STATUS_OK)
- {
- nerr_log_error(err);
- cgi_destroy(&cgi);
- return -1;
- }
- imd_file = hdf_get_value(cgi->hdf, "CGI.PathTranslated", NULL);
- ne_warn("Reading IMD file %s", imd_file);
- err = hdf_read_file (cgi->hdf, imd_file);
- if (err != STATUS_OK)
- {
- cgi_neo_error(cgi, err);
- nerr_log_error(err);
- cgi_destroy(&cgi);
- return -1;
- }
-
- cs_file = hdf_get_value(cgi->hdf, "Template", NULL);
- image = hdf_get_value(cgi->hdf, "Query.image", NULL);
- album = hdf_get_value(cgi->hdf, "Query.album", "");
- picture = hdf_get_value(cgi->hdf, "Query.picture", NULL);
- if (image)
- {
- err = dowork_image(cgi, image);
- if (err)
- {
- nerr_log_error(err);
- cgi_destroy(&cgi);
- return -1;
- }
- }
- else
- {
- if (!picture)
- {
- err = dowork_album (cgi, album);
- }
- else
- {
- err = dowork_picture (cgi, album, picture);
- }
- if (err != STATUS_OK)
- {
- if (nerr_handle(&err, CGIFinished))
- {
- /* pass */
- }
- else
- {
- cgi_neo_error(cgi, err);
- nerr_log_error(err);
- cgi_destroy(&cgi);
- return -1;
- }
- }
- else
- {
- err = cgi_display(cgi, cs_file);
- if (err != STATUS_OK)
- {
- cgi_neo_error(cgi, err);
- nerr_log_error(err);
- cgi_destroy(&cgi);
- return -1;
- }
- }
- }
- cgi_destroy(&cgi);
- return 0;
-}
diff --git a/imd/imd.cs b/imd/imd.cs
deleted file mode 100644
index 4ac4e26..0000000
--- a/imd/imd.cs
+++ /dev/null
@@ -1,205 +0,0 @@
-<?cs def:frame_picture(image, link, size) ?>
- <TABLE cellspacing=0 cellpadding=0 border=0 WIDTH=1%>
- <TR>
- <TD><IMG name="frame0" border=0 height=8 width=8 src="0.gif"></TD>
- <TD><IMG name="frame1" border=0 height=8 width=<?cs var:image.width ?> src="1.gif"></TD>
- <TD><IMG name="frame2" border=0 height=8 width=8 src="2.gif"></TD>
- </TR>
- <TR>
- <TD><IMG name="frame3" border=0 height=<?cs var:image.height ?> width=8 src="3.gif"></TD>
- <TD><a href="<?cs var:link ?>"><img border=0 width=<?cs var:image.width ?> height=<?cs var:image.height ?> src="<?cs var:CGI.PathInfo?>?image=<?cs var:url_escape(Album) ?>/<?cs var:url_escape(image) ?>&width=<?cs var:image.width ?>&height=<?cs var:image.height ?>"></a></TD>
- <TD><IMG name="frame4" border=0 height=<?cs var:image.height ?> width=8 src="4.gif"></TD>
- </TR>
- <TR>
- <TD><IMG name="frame5" border=0 height=8 width=8 src="5.gif"></TD>
- <TD><IMG name="frame6" border=0 height=8 width=<?cs var:image.width ?> src="6.gif"></TD>
- <TD><IMG name="frame7" border=0 height=8 width=8 src="7.gif"></TD>
- </TR>
- </TABLE>
-<?cs /def ?>
-<HTML>
-<HEAD>
-<TITLE><?cs var:Title ?><?cs if:Context == "album" ?> <?cs var:Album.Raw ?> <?cs var:Album.Start + #1 ?> - <?cs var:Album.Next ?> of <?cs var:Album.Count ?><?cs else ?> <?cs var:Album.Raw ?>
-- <?cs var:Picture ?><?cs /if ?></TITLE>
-</HEAD>
-<BODY BGCOLOR=#ffffff>
-<?cs include:"/home/www/header.html" ?>
- <A HREF="<?cs var:CGI.PathInfo?>"><?cs var:Title ?></A>
- <?cs each:part = Album.Path ?>
- <?cs if:part.path == Album ?>
- / <?cs var:part ?>
- <?cs else ?>
- / <A HREF="<?cs var:CGI.PathInfo?>?album=<?cs var:url_escape(part.path) ?>"><?cs var:part ?></A>
- <?cs /if ?>
- <?cs /each ?>
- <?cs if:Context == "album" ?>
- <?cs if:Albums.0 ?>
- <p>
- <?cs each:album = Albums ?>
- <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=1 width=100%>
- <TR><TD style="border-bottom:2px solid #888888;" COLSPAN=4><font size=+2>
- <a href="<?cs var:CGI.PathInfo?>?album=<?cs if:Album ?><?cs var:Album ?>/<?cs /if ?><?cs var:album ?>"><?cs var:album ?></a></font> (<?cs var:album.Count ?> images)
- </td></tr>
- <TR>
- <?cs each:image = album.Images ?>
- <td align=center>
- <TABLE cellspacing=0 cellpadding=0 border=0 WIDTH=1%>
- <TR>
- <TD><IMG name="frame0" border=0 height=8 width=8 src="0.gif"></TD>
- <TD><IMG name="frame1" border=0 height=8 width=<?cs var:image.width ?> src="1.gif"></TD>
- <TD><IMG name="frame2" border=0 height=8 width=8 src="2.gif"></TD>
- </TR>
- <TR>
- <TD><IMG name="frame3" border=0 height=<?cs var:image.height ?> width=8 src="3.gif"></TD>
- <TD><a href="<?cs var:CGI.PathInfo?>?album=<?cs if:Album ?><?cs var:Album ?>/<?cs /if ?><?cs var:album ?>&picture=<?cs var:url_escape(image) ?>"><img border=0 width=<?cs var:image.width ?> height=<?cs var:image.height ?> src="<?cs var:CGI.PathInfo?>?image=<?cs if:Album ?><?cs var:url_escape(Album) ?>/<?cs /if ?><?cs var:url_escape(album) ?>/<?cs var:url_escape(image) ?>&width=<?cs var:image.width ?>&height=<?cs var:image.height ?>"></a></TD>
- <TD><IMG name="frame4" border=0 height=<?cs var:image.height ?> width=8 src="4.gif"></TD>
- </TR>
- <TR>
- <TD><IMG name="frame5" border=0 height=8 width=8 src="5.gif"></TD>
- <TD><IMG name="frame6" border=0 height=8 width=<?cs var:image.width ?> src="6.gif"></TD>
- <TD><IMG name="frame7" border=0 height=8 width=8 src="7.gif"></TD>
- </TR>
- </TABLE>
- </td>
- <?cs /each ?>
- </TR>
- </TABLE>
- <?cs /each ?>
- <?cs /if ?>
- <?cs if:#Album.Count ?>
- <DIV ALIGN=RIGHT>
- <?cs if:Album.Start > #0 ?>
- <A HREF="<?cs var:CGI.PathInfo ?>?album=<?cs var:Album ?>">First</A>
- <?cs else ?>
- First
- <?cs /if ?>
- &nbsp;
- <?cs if:Album.Prev > #0 ?>
- <A HREF="<?cs var:CGI.PathInfo ?>?album=<?cs var:Album ?>&start=<?cs var:Album.Prev ?>">Prev</A>
- <?cs else ?>
- Prev
- <?cs /if ?>
- &nbsp;
- <?cs var:#Album.Start + #1 ?> - <?cs var:#Album.Next ?> of <?cs var:#Album.Count ?>
- &nbsp;
- <?cs if:#Album.Next < #Album.Count ?>
- <A HREF="<?cs var:CGI.PathInfo ?>?album=<?cs var:Album ?>&start=<?cs var:Album.Next ?>">Next</A>
- <?cs else ?>
- Next
- <?cs /if ?>
- &nbsp;
- <?cs if:#Album.Start < #Album.Last ?>
- <A HREF="<?cs var:CGI.PathInfo ?>?album=<?cs var:Album ?>&start=<?cs var:Album.Last ?>">Last</A>
- <?cs else ?>
- Last
- <?cs /if ?>
- </DIV>
-
- <TABLE>
- <TR>
- <?cs set:TotalWidth = #0 ?>
- <?cs each:image=Images ?>
- <?cs set:nextWidth = #TotalWidth + #image.width ?>
- <?cs if:#nextWidth > #PageWidth ?></TR></TABLE><TABLE><TR><?cs set:TotalWidth = image.width ?><?cs else ?><?cs set:TotalWidth = nextWidth ?><?cs /if ?>
- <TD><?cs call:frame_picture(image, CGI.PathInfo + "?album=" + Album + "&picture=" + url_escape(image), "8") ?></TD>
- <?cs /each ?>
- </TR>
- </TABLE>
- <DIV ALIGN=RIGHT>
- <?cs if:Album.Start > #0 ?>
- <A HREF="<?cs var:CGI.PathInfo ?>?album=<?cs var:Album ?>">First</A>
- <?cs else ?>
- First
- <?cs /if ?>
- &nbsp;
- <?cs if:Album.Prev > #0 ?>
- <A HREF="<?cs var:CGI.PathInfo ?>?album=<?cs var:Album ?>&start=<?cs var:Album.Prev ?>">Prev</A>
- <?cs else ?>
- Prev
- <?cs /if ?>
- &nbsp;
- <?cs var:#Album.Start + #1 ?> - <?cs var:#Album.Next ?> of <?cs var:#Album.Count ?>
- &nbsp;
- <?cs if:#Album.Next < #Album.Count ?>
- <A HREF="<?cs var:CGI.PathInfo ?>?album=<?cs var:Album ?>&start=<?cs var:Album.Next ?>">Next</A>
- <?cs else ?>
- Next
- <?cs /if ?>
- &nbsp;
- <?cs if:#Album.Start < #Album.Last ?>
- <A HREF="<?cs var:CGI.PathInfo ?>?album=<?cs var:Album ?>&start=<?cs var:Album.Last ?>">Last</A>
- <?cs else ?>
- Last
- <?cs /if ?>
- </DIV>
- <?cs /if ?>
- <?cs else ?><?cs # picture ?>
- <DIV ALIGN=RIGHT>
- <?cs set:count = #0 ?>
- <?cs each:image=Show ?>
- <a href="<?cs var:CGI.PathInfo?>?album=<?cs var:Album ?>&picture=<?cs var:url_escape(image) ?>">
- <?cs if:count == #0 ?>
- More
- <?cs elif:count == #1 ?>
- Previous
- <?cs elif:count == #2 ?>
- Image #<?cs Name:image ?>
- <?cs elif:count == #3 ?>
- Next
- <?cs elif:count == #4 ?>
- More
- <?cs /if ?>
- <?cs set:count = count + #1 ?>
- </a> &nbsp;
- <?cs /each ?>
- </DIV>
- <hr>
- <TABLE cellspacing=0 cellpadding=0 border=0 align=center>
- <TR>
- <TD><IMG name="frame0" border=0 height=18 width=18 src="0.gif"></TD>
- <TD><IMG name="frame1" border=0 height=18 width=<?cs var:Picture.width ?> src="1.gif"></TD>
- <TD><IMG name="frame2" border=0 height=18 width=18 src="2.gif"></TD>
- </TR>
- <TR>
- <TD><IMG name="frame3" border=0 height=<?cs var:Picture.height ?> width=18 src="3.gif"></TD>
- <?cs if:#0 && Picture.avi ?>
- <TD><EMBED CONTROLborder=0 width=<?cs var:Picture.width?> height=<?cs var:Picture.height?> src="<?cs var:CGI.PathInfo?>?image=<?cs var:url_escape(Album) ?>/<?cs var:url_escape(Picture.avi) ?>" AUTOSTART=true></EMBED></TD>
- <?cs else ?>
- <TD><img border=0 width=<?cs var:Picture.width?> height=<?cs var:Picture.height?> src="<?cs var:CGI.PathInfo?>?image=<?cs var:url_escape(Album) ?>/<?cs var:url_escape(Picture) ?>&width=<?cs var:Picture.width ?>&height=<?cs var:Picture.height?>&quality=1" <?cs if:Picture.avi ?>dynsrc="<?cs var:CGI.PathInfo?>?image=<?cs var:url_escape(Album) ?>/<?cs var:url_escape(Picture.avi) ?>&width=<?cs var:Picture.width ?>&height=<?cs var:Picture.height?>&quality=1"<?cs /if ?>></TD>
- <?cs /if ?>
- <TD><IMG name="frame4" border=0 height=<?cs var:Picture.height ?> width=18 src="4.gif"></TD>
- </TR>
- <TR>
- <TD><IMG name="frame5" border=0 height=18 width=18 src="5.gif"></TD>
- <TD><IMG name="frame6" border=0 height=18 width=<?cs var:Picture.width ?> src="6.gif"></TD>
- <TD><IMG name="frame7" border=0 height=18 width=18 src="7.gif"></TD>
- </TR>
- <TR><TD COLSPAN=3 ALIGN=CENTER>
- <?cs if:Picture.avi ?>
- <a href="<?cs var:CGI.PathInfo?>?image=<?cs var:url_escape(Album) ?>/<?cs var:url_escape(Picture.avi) ?>">Raw Video <?cs var:html_escape(Picture.avi) ?></a>
- <?cs else ?>
- <a href="<?cs var:CGI.PathInfo?>?image=<?cs var:url_escape(Album) ?>/<?cs var:url_escape(Picture) ?>&quality=1">Raw Picture <?cs var:html_escape(Picture) ?></a>
- <?cs /if ?>
- </TD></TR>
- </TABLE>
- <CENTER>
- <TABLE>
- <TR>
- <?cs each:image=Show ?>
- <?cs if:image != Picture ?>
- <TD><?cs call:frame_picture(image, CGI.PathInfo + "?album=" + Album + "&picture=" + url_escape(image), "8") ?></TD>
- <?cs /if ?>
- <?cs /each ?>
- </TR>
- </TABLE>
- </CENTER>
- <?cs if:0 && CGI.RemoteAddress == "66.125.228.221" ?>
- &nbsp; Rotate:
- <A HREF="<?cs var:CGI.PathInfo ?>?album=<?cs var:Album ?>&picture=<?cs var:url_escape(Picture) ?>&rotate=-90">Left</A> -
- <A HREF="<?cs var:CGI.PathInfo ?>?album=<?cs var:Album ?>&picture=<?cs var:url_escape(Picture) ?>&rotate=90">Right</A> -
- <A HREF="<?cs var:CGI.PathInfo ?>?album=<?cs var:Album ?>&picture=<?cs var:url_escape(Picture) ?>&rotate=180">Flip</A>
- <?cs /if ?>
- <?cs /if ?>
-<?cs include:"/home/www/footer.html" ?>
-</BODY>
-</HTML>
diff --git a/imd/imdm.py b/imd/imdm.py
deleted file mode 100755
index 442c1ee..0000000
--- a/imd/imdm.py
+++ /dev/null
@@ -1,209 +0,0 @@
-#!/usr/local/bin/python
-#
-# imdm
-#
-# IMage Display Master
-#
-# This uses the affiliated C-cgi "imd" to build a caching image display
-# server with only passive Apache cgis.
-#
-import sys,os,string
-import cgi
-
-# this function should find the first four images inside a
-# nested subdirectory
-
-albumstartfile = "/~jeske/Images/jeskealbum.imd"
-imagestartfile = "/~jeske/Images/jeskealbum.imc"
-
-THUMB_WIDTH = 120
-THUMB_HEIGHT = 90
-
-# ------------------------------------------------------------------------------------
-#
-# utility functions
-
-def albumoverview(basedir,sub_dir,count = 4,skip = 0):
- images = []
-
- fulldir = os.path.join(basedir,sub_dir)
- for a_entry in os.listdir(fulldir):
- fullpath = os.path.join(fulldir,a_entry)
- if os.path.isfile(fullpath):
- if string.lower(string.split(a_entry,".")[-1]) in ["jpeg","jpg"]:
- images.append(os.path.join(sub_dir,a_entry))
- elif os.path.isdir(fullpath):
- images + albumoverview(basedir,os.path.join(sub_dir,a_entry),1)
- if len(images) >= (count + skip):
- return images[skip:]
-
- return images[skip:]
-
-
-def makethumbnailimgtag(filename,width=THUMB_WIDTH,height=THUMB_HEIGHT):
- global imagestartfile
- return '<IMG SRC="%s?image=%s&width=%s&height=%s">' % (imagestartfile,filename,width,height)
-
-def makealbumurl(dir):
- global albumstartfile
- return "%s?album=%s" % (albumstartfile,dir)
-
-def makepictureurl(dir,picture):
- global albumstartfile
- return "%s?album=%s&picture=%s" % (albumstartfile,dir,picture)
-
-# ------------------------------------------------------------------------------------
-#
-# picturedisplay
-
-def picturedisplay(basedir,album,picture):
- sys.stdout.write("<A HREF=\"%s?\">top</A> " % albumstartfile)
-
- sys.stdout.write("-- <A HREF=\"%s\">%s</A>" % (makealbumurl(album),album))
-
- imagename = os.path.join(album,picture)
-
- sys.stdout.write("<br><hr>")
-
- sys.stdout.write("<TABLE WIDTH=100%><TR><TD ALIGN=CENTER>\n")
- sys.stdout.write(makethumbnailimgtag(imagename,width=600,height=500))
- sys.stdout.write("</TD></TR></TABLE>\n")
-
- images = albumoverview(basedir,album,count=500)
- image_index = None
- for x in range(len(images)):
- if images[x] == imagename:
- image_index = x
- break
-
- if not image_index is None:
- sys.stdout.write("<CENTER><TABLE WIDTH=50% BORDER=1><TR>")
-
- # pre-images
- for i in range(1,3):
- pic_index = image_index - i
-
- picture_path = string.join(string.split(images[pic_index],'/')[1:],'/')
- sys.stdout.write("<TD ALIGN=CENTER><A HREF=\"%s\">%s</A></TD>" % (makepictureurl(album,picture_path),makethumbnailimgtag(images[pic_index])))
-
- sys.stdout.write("<br>")
-
- # post-images
- for i in range(1,3):
- pic_index = image_index + i
- if pic_index >= len(images):
- pic_index = pic_index - len(images)
-
- picture_path = string.join(string.split(images[pic_index],'/')[1:],'/')
- sys.stdout.write("<TD ALIGN=CENTER><A HREF=\"%s\">%s</A></TD>" % (makepictureurl(album,picture_path), makethumbnailimgtag(images[pic_index])))
- sys.stdout.write("</TR></TABLE></CENTER>\n")
-
- # navigation
-
-
-# ------------------------------------------------------------------------------------
-#
-# albumdisplay
-
-
-
-def albumdisplay(basedir,album,columns=7,rows=5):
- next_page = 0
-
-
- sys.stdout.write("<table border=0 bgcolor=#cccccc width=100%%><tr><td align=center><font size=+2>%s</font></td></tr></table>" % album)
-
- imgcount = columns * rows
- images = albumoverview(basedir,album,count=(imgcount + 1),skip=0)
-
- if len(images) > imgcount:
- images = images[:-1]
- next_page = 1
-
- while images:
- sys.stdout.write("<CENTER><TABLE WIDTH=90% CELLSPACING=3 BORDER=1><TR>")
- for a_col in range(columns):
- if len(images):
- picture_path = string.join(string.split(images[0],'/')[1:],'/')
- sys.stdout.write("<TD ALIGN=CENTER><A HREF=\"%s\">%s</A></TD>" % (makepictureurl(album,picture_path),makethumbnailimgtag(images[0])))
- images = images[1:]
- sys.stdout.write("</tr></table></CENTER>")
-
- if next_page:
- sys.stdout.write("more...")
-
-
-# ------------------------------------------------------------------------------------
-#
-# topalbumoverview
-
-def topalbumoverview(dir):
- for a_dir in os.listdir(dir):
- if os.path.isdir(os.path.join(dir,a_dir)):
- sys.stdout.write("<CENTER>")
- sys.stdout.write("<TABLE BGCOLOR=#ccccc WIDTH=50% BORDER=0 CELLSPACING=1 CELLPADDING=1>")
-
- sys.stdout.write("<TR><TD> <font size=+2><A HREF=\"%s\">%s</A></font></TD></TR>" % (makealbumurl(a_dir),a_dir))
-
- sys.stdout.write("<TR><TD ALIGN=CENTER><TABLE BGCOLOR=#FFFFFF WIDTH=100% BORDER=0 CELSPACING=0 CELLPADDING=0><TR>")
-
- for a_file in albumoverview(dir,a_dir):
- picture_path = string.join(string.split(a_file,'/')[1:],'/')
- sys.stdout.write("<TD ALIGN=CENTER><A HREF=\"%s\">%s</A></TD>\n" % (makepictureurl(a_dir,picture_path),makethumbnailimgtag(a_file)))
- sys.stdout.write("</TR></TABLE></TD></TR></TABLE></CENTER>\n<p>\n")
-
-# ------------------------------------------------------------------------------------
-#
-# readvars() -- simple file format reader
-
-def readvars(filename):
- vars = {}
- data = open(filename,"rb").read()
- lines = string.split(data,"\n")
- for a_line in lines:
- stripped_line = string.strip(a_line)
- if not stripped_line or stripped_line[0] == "#":
- continue
- try:
- key,value = string.split(a_line,"=")
- vars[key] = value
- except:
- pass
- return vars
-
-# ------------------------------------------------------------------------------------
-#
-# main()
-
-
-def main():
- global cgiform
- cgiform = cgi.FieldStorage()
-
- sys.stdout.write("Content-Type: text/html\n\n")
- sys.stdout.write("<h1>HTML Image Viewer!</h1><p>")
-
- myvars = readvars(os.environ['PATH_TRANSLATED'])
-
- sys.stderr.write(repr(myvars))
-
- global albumstartfile, imagestartfile
- albumstartfile = os.environ['PATH_INFO']
- imagestartfile = myvars['IMGSTARTFILE']
- BASEDIR = myvars['BASEDIR']
-
- album = cgiform.getvalue('album',None)
- picture = cgiform.getvalue('picture',None)
-
- if album is None:
- topalbumoverview(BASEDIR)
- elif picture is None:
- albumdisplay(BASEDIR,album)
- else:
- picturedisplay(BASEDIR,album,picture)
-
-if __name__ == "__main__":
- main()
-
-
-
diff --git a/imd/test.in b/imd/test.in
deleted file mode 100644
index ec89306..0000000
--- a/imd/test.in
+++ /dev/null
@@ -1,2 +0,0 @@
-PATH_TRANSLATED=/home/blong/public_html/Images/test.imd
-QUERY_STRING=
diff --git a/install-sh b/install-sh
deleted file mode 100755
index 89fc9b0..0000000
--- a/install-sh
+++ /dev/null
@@ -1,238 +0,0 @@
-#! /bin/sh
-#
-# install - install a program, script, or datafile
-# This comes from X11R5.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.
-#
-
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-tranformbasename=""
-transform_arg=""
-instcmd="$mvprog"
-chmodcmd="$chmodprog 0755"
-chowncmd=""
-chgrpcmd=""
-stripcmd=""
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=""
-dst=""
-dir_arg=""
-
-while [ x"$1" != x ]; do
- case $1 in
- -c) instcmd="$cpprog"
- shift
- continue;;
-
- -d) dir_arg=true
- shift
- continue;;
-
- -m) chmodcmd="$chmodprog $2"
- shift
- shift
- continue;;
-
- -o) chowncmd="$chownprog $2"
- shift
- shift
- continue;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift
- shift
- continue;;
-
- -s) stripcmd="$stripprog"
- shift
- continue;;
-
- -t=*) transformarg=`echo $1 | sed 's/-t=//'`
- shift
- continue;;
-
- -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
- shift
- continue;;
-
- *) if [ x"$src" = x ]
- then
- src=$1
- else
- # this colon is to work around a 386BSD /bin/sh bug
- :
- dst=$1
- fi
- shift
- continue;;
- esac
-done
-
-if [ x"$src" = x ]
-then
- echo "install: no input file specified"
- exit 1
-else
- true
-fi
-
-if [ x"$dir_arg" != x ]; then
- dst=$src
- src=""
-
- if [ -d $dst ]; then
- instcmd=:
- else
- instcmd=mkdir
- fi
-else
-
-# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
-# might cause directories to be created, which would be especially bad
-# if $src (and thus $dsttmp) contains '*'.
-
- if [ -f $src -o -d $src ]
- then
- true
- else
- echo "install: $src does not exist"
- exit 1
- fi
-
- if [ x"$dst" = x ]
- then
- echo "install: no destination specified"
- exit 1
- else
- true
- fi
-
-# If destination is a directory, append the input filename; if your system
-# does not like double slashes in filenames, you may need to add some logic
-
- if [ -d $dst ]
- then
- dst="$dst"/`basename $src`
- else
- true
- fi
-fi
-
-## this sed command emulates the dirname command
-dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
-
-# Make sure that the destination directory exists.
-# this part is taken from Noah Friedman's mkinstalldirs script
-
-# Skip lots of stat calls in the usual case.
-if [ ! -d "$dstdir" ]; then
-defaultIFS='
-'
-IFS="${IFS-${defaultIFS}}"
-
-oIFS="${IFS}"
-# Some sh's can't handle IFS=/ for some reason.
-IFS='%'
-set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
-IFS="${oIFS}"
-
-pathcomp=''
-
-while [ $# -ne 0 ] ; do
- pathcomp="${pathcomp}${1}"
- shift
-
- if [ ! -d "${pathcomp}" ] ;
- then
- $mkdirprog "${pathcomp}"
- else
- true
- fi
-
- pathcomp="${pathcomp}/"
-done
-fi
-
-if [ x"$dir_arg" != x ]
-then
- $doit $instcmd $dst &&
-
- if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
- if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
- if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
- if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
-else
-
-# If we're going to rename the final executable, determine the name now.
-
- if [ x"$transformarg" = x ]
- then
- dstfile=`basename $dst`
- else
- dstfile=`basename $dst $transformbasename |
- sed $transformarg`$transformbasename
- fi
-
-# don't allow the sed command to completely eliminate the filename
-
- if [ x"$dstfile" = x ]
- then
- dstfile=`basename $dst`
- else
- true
- fi
-
-# Make a temp file name in the proper directory.
-
- dsttmp=$dstdir/#inst.$$#
-
-# Move or copy the file name to the temp name
-
- $doit $instcmd $src $dsttmp &&
-
- trap "rm -f ${dsttmp}" 0 &&
-
-# and set any options; do chmod last to preserve setuid bits
-
-# If any of these fail, we abort the whole thing. If we want to
-# ignore errors from any of these, just make sure not to ignore
-# errors from the above "$doit $instcmd $src $dsttmp" command.
-
- if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
- if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
- if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
- if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
-
-# Now rename the file to the real destination.
-
- $doit $rmcmd -f $dstdir/$dstfile &&
- $doit $mvcmd $dsttmp $dstdir/$dstfile
-
-fi &&
-
-
-exit 0
diff --git a/java-jni/Android.mk b/java-jni/Android.mk
deleted file mode 100644
index 3b5f876..0000000
--- a/java-jni/Android.mk
+++ /dev/null
@@ -1,79 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-
-
-# clearsilver java library
-# ============================================================
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := docs
-
-LOCAL_SRC_FILES := \
- CS.java \
- CSFileLoader.java \
- JNI.java \
- HDF.java
-
-LOCAL_MODULE:= clearsilver
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-our_java_lib := $(LOCAL_BUILT_MODULE)
-
-
-# libclearsilver-jni.so
-# ============================================================
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := docs
-
-LOCAL_SRC_FILES:= \
- j_neo_util.c \
- j_neo_cs.c
-
-LOCAL_C_INCLUDES := \
- $(LOCAL_PATH)/..
-
-LOCAL_CFLAGS += -fPIC
-
-LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
-
-ifeq ($(HOST_OS),darwin)
- LOCAL_C_INCLUDES += /System/Library/Frameworks/JavaVM.framework/Headers
- LOCAL_LDLIBS := -framework JavaVM
-else
- LOCAL_C_INCLUDES += $(JNI_H_INCLUDE)
-endif
-
-LOCAL_MODULE:= libclearsilver-jni
-
-LOCAL_MODULE_SUFFIX := $(HOST_JNILIB_SUFFIX)
-
-LOCAL_SHARED_LIBRARIES := libneo_util libneo_cs libneo_cgi
-
-include $(BUILD_HOST_SHARED_LIBRARY)
-
-# Use -force with javah to make sure that the output file
-# gets updated. If javah decides not to update the file,
-# make gets confused.
-
-GEN := $(intermediates)/org_clearsilver_HDF.h
-$(GEN): PRIVATE_OUR_JAVA_LIB := $(our_java_lib)
-$(GEN): PRIVATE_CUSTOM_TOOL = javah -classpath $(PRIVATE_OUR_JAVA_LIB) -force -o $@ -jni org.clearsilver.HDF
-$(GEN): PRIVATE_MODULE := $(LOCAL_MODULE)
-$(GEN): $(our_java_lib)
- $(transform-generated-source)
-$(intermediates)/j_neo_util.o : $(GEN)
-
-GEN := $(intermediates)/org_clearsilver_CS.h
-$(GEN): PRIVATE_OUR_JAVA_LIB := $(our_java_lib)
-$(GEN): PRIVATE_CUSTOM_TOOL = javah -classpath $(PRIVATE_OUR_JAVA_LIB) -force -o $@ -jni org.clearsilver.CS
-$(GEN): PRIVATE_MODULE := $(LOCAL_MODULE)
-$(GEN): $(our_java_lib)
- $(transform-generated-source)
-$(intermediates)/j_neo_cs.o : $(GEN)
-
-# this forces us into 64 bit mode, even though for the non-simulator builds we
-# mostly don't do that. Java on Hardy is 64 bit, and rather than finding a 32
-# bit java build, just build this in 64 bit.
-$(LOCAL_BUILT_MODULE): HOST_GLOBAL_CFLAGS:=
-$(LOCAL_BUILT_MODULE): HOST_GLOBAL_CPPFLAGS:=
diff --git a/java-jni/CGI.java b/java-jni/CGI.java
deleted file mode 100644
index 907f8d0..0000000
--- a/java-jni/CGI.java
+++ /dev/null
@@ -1,18 +0,0 @@
-
-import java.io.*;
-import java.util.*;
-
-class CGI {
- public int _cgiptr;
-
- static {
- JNI.loadLibrary();
- }
-
- public CGI() {
- _cgiptr = _init();
- }
-
- private static native int _init();
- private static native void parse();
-};
diff --git a/java-jni/CS.java b/java-jni/CS.java
deleted file mode 100644
index 5087e25..0000000
--- a/java-jni/CS.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package org.clearsilver;
-
-import java.io.*;
-import java.util.*;
-
-public class CS {
- public long csptr;
-
- protected HDF globalHDF;
- protected HDF localHDF;
-
- static {
- JNI.loadLibrary();
- }
-
- public CS(HDF ho) {
- this.globalHDF = null;
- this.localHDF = ho;
- csptr = _init(ho.hdfptr);
- }
-
- // Construct with global HDF to search if local HDF returns null
- public CS(HDF ho, HDF global) {
- this(ho);
-
- this.globalHDF = global;
- if (global != null) {
- _setGlobalHdf(csptr,global.hdfptr);
- }
- }
-
- // Specify a new/different global HDF
- public void setGlobalHDF(HDF global) {
- _setGlobalHdf(csptr,global.hdfptr);
- this.globalHDF = global;
- }
-
- // Return global hdf in use
- public HDF getGlobalHDF() {
- return this.globalHDF;
- }
-
- public void close() {
- if (csptr != 0) {
- _dealloc(csptr);
- csptr = 0;
- }
- }
-
- public void finalize() {
- close();
- }
-
- public void parseFile(String filename) {
- if (csptr == 0) {
- throw new NullPointerException("CS is closed.");
- }
- _parseFile(csptr, filename, fileLoader != null);
- }
-
- public void parseStr(String content) {
- if (csptr == 0) {
- throw new NullPointerException("CS is closed.");
- }
- _parseStr(csptr,content);
- }
-
- public String render() {
- if (csptr == 0) {
- throw new NullPointerException("CS is closed.");
- }
- return _render(csptr);
- }
-
-
- protected String fileLoad(String filename) throws IOException,
- FileNotFoundException {
- if (csptr == 0) {
- throw new NullPointerException("CS is closed.");
- }
- CSFileLoader aFileLoader = fileLoader;
- if (aFileLoader == null) {
- throw new NullPointerException("No fileLoader specified.");
- } else {
- String result = aFileLoader.load(localHDF, filename);
- if (result == null) {
- throw new NullPointerException("CSFileLoader.load() returned null");
- }
- return result;
- }
- }
-
- // The optional CS file loader to use to read in files
- private CSFileLoader fileLoader = null;
-
- /**
- * Get the file loader in use, if any.
- * @return the file loader in use.
- */
- public CSFileLoader getFileLoader() {
- return fileLoader;
- }
-
- /**
- * Set the CS file loader to use
- * @param fileLoader the file loader that should be used.
- */
- public void setFileLoader(CSFileLoader fileLoader) {
- this.fileLoader = fileLoader;
- }
-
-
- private native long _init(long ptr);
- private native void _dealloc(long ptr);
- private native void _parseFile(long ptr, String filename,
- boolean use_cb);
- private native void _parseStr(long ptr, String content);
- private native String _render(long ptr);
- private native void _setGlobalHdf(long csptr, long hdfptr);
-};
diff --git a/java-jni/CSFileLoader.java b/java-jni/CSFileLoader.java
deleted file mode 100644
index c0cb031..0000000
--- a/java-jni/CSFileLoader.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.clearsilver;
-
-import java.io.IOException;
-
-/**
- * Interface for CS file hook
- *
- * @author smarti@google.com (Sergio Marti)
- */
-public interface CSFileLoader {
-
- /**
- * Callback method that is expected to return the contents of the specified
- * file as a string.
- * @param hdf the HDF structure associated with HDF or CS object making the
- * callback.
- * @param filename the name of the file that should be loaded.
- * @return a string containing the contents of the file.
- */
- public String load(HDF hdf, String filename) throws IOException;
-
-}
diff --git a/java-jni/CSTest.java b/java-jni/CSTest.java
deleted file mode 100644
index afb94a0..0000000
--- a/java-jni/CSTest.java
+++ /dev/null
@@ -1,271 +0,0 @@
-
-import java.io.*;
-import java.util.*;
-
-import org.clearsilver.CS;
-import org.clearsilver.CSFileLoader;
-import org.clearsilver.HDF;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-
-
-public class CSTest {
-
- public static void main( String [] args ) throws IOException {
- org.clearsilver.HDF hdf = new HDF();
-
- System.out.println("Testing HDF set and dump\n");
- hdf.setValue("Foo.Bar","10");
- hdf.setValue("Foo.Baz","20");
- System.out.println( hdf.dump() );
-
- System.out.println("Testing HDF get\n");
- String foo = hdf.getValue("Foo.Bar", "30");
- System.out.println( foo );
- foo = hdf.getValue("Foo.Baz", "30");
- System.out.println( foo );
-
- System.out.println( "----" );
-
- System.out.println("Testing HDF setSymLink\n");
- hdf.setSymLink("Foo.Baz2","Foo.Baz");
- foo = hdf.getValue("Foo.Baz", "30");
- System.out.println( foo );
-
- System.out.println( "----" );
-
- System.out.println("Testing HDF get where default value is null\n");
- foo = hdf.getValue("Foo.Bar", null);
- System.out.println("foo = " + foo);
- foo = hdf.getValue("Foo.Nonexistent", null);
- System.out.println("foo = " + foo);
-
- System.out.println( "----" );
-
- int fooInt = hdf.getIntValue("Foo.Bar", 30);
- System.out.println("Testing HDF get int\n");
- System.out.println( fooInt );
-
- System.out.println( "----" );
-
- org.clearsilver.CS cs = new CS(hdf);
-
- System.out.println("Testing HDF parse/render\n");
- String tmplstr = "Foo.Bar:<?cs var:Foo.Bar ?>\nFoo.Baz:<?cs var:Foo.Baz ?>\n";
- System.out.println(tmplstr);
- System.out.println("----");
-
- cs.parseStr(tmplstr);
- System.out.println(cs.render());
-
- // test registered functions
- System.out.println("Testing registered string functions\n");
- hdf.setValue("Foo.EscapeTest","abc& 231<>/?");
-
- tmplstr = " <?cs var:url_escape(Foo.EscapeTest) ?> <?cs var:html_escape(Foo.EscapeTest) ?>";
-
- cs.parseStr(tmplstr);
- System.out.println(cs.render());
-
- cs = new CS(hdf);
-
- System.out.println("Testing white space stripping\n");
- // test white space stripping
- tmplstr = " <?cs var:Foo.Bar ?> This is a string without whitespace stripped";
- cs.parseStr(tmplstr);
- System.out.println(cs.render());
-
- hdf.setValue("ClearSilver.WhiteSpaceStrip", "1");
- System.out.println(cs.render());
-
- // Now, test debug dump
- System.out.println("Testing debug dump\n");
- hdf.setValue("ClearSilver.DisplayDebug", "1");
- System.out.println(cs.render());
-
- System.out.println("Final HDF dump\n");
- System.out.println( hdf.dump() );
-
- // Now, test reading an HDF file from disk
- System.out.println("Testing HDF.readFile()\n");
- HDF file_hdf = new HDF();
- file_hdf.readFile("testdata/test1.hdf");
- System.out.println(file_hdf.dump());
-
- System.out.println("Testing HDF.readFile() for a file that doesn't exist");
- try {
- file_hdf.readFile("testdata/doesnt_exist.hdf");
- } catch (Exception e) {
- // The error message contains line numbers for functions in
- // neo_hdf.c, and I don't want this test to fail if the line numbers
- // change, so I'm not going to print out the exception message here.
- // The important thing to test here is that an exception is thrown
- // System.out.println(e + "\n");
- System.out.println("Caught exception of type " + e.getClass().getName() + "\n");
- }
-
- System.out.println("Testing HDF.writeFile()\n");
- file_hdf.writeFile("test1_out.hdf");
- file_hdf.writeFileAtomic("test1_out2.hdf");
-
- System.out.println("Testing HDF.writeString()\n");
- System.out.println(file_hdf.writeString());
-
- System.out.println("Testing HDF.getObj()");
- HDF foo_hdf = file_hdf.getObj("Foo");
- System.out.println(foo_hdf.dump());
-
- System.out.println("Testing HDF.objName()");
- System.out.println("Should be \"Foo\": " + foo_hdf.objName());
- System.out.println("Should be \"Bar\": "
- + foo_hdf.getObj("Bar").objName());
- System.out.println("Should be null: " + file_hdf.objName() + "\n");
-
- System.out.println("Testing HDF.objValue()");
- System.out.println("Value of Foo.Bar: "
- + foo_hdf.getObj("Bar").objValue());
- System.out.println("Value of root node: " + file_hdf.objValue() + "\n");
-
- System.out.println("Testing HDF.objChild()");
- HDF child_hdf = foo_hdf.objChild();
- System.out.println("First child name: " + child_hdf.objName() + "\n");
-
- System.out.println("Testing HDF.objNext()");
- HDF next_hdf = child_hdf.objNext();
- System.out.println("Next child name: " + next_hdf.objName());
- next_hdf = next_hdf.objNext();
- System.out.println("Next child (should be null): " + next_hdf + "\n");
-
- System.out.println("Testing HDF.copy()");
- HDF one = new HDF();
- one.setValue("name", "barneyb");
- one.setValue("age", "25");
- HDF two = new HDF();
- two.setValue("entity.type", "person");
- two.copy("entity.value", one);
- System.out.println("name should be barneyb: " +
- two.getValue("entity.value.name", "--undefined--") +"\n");
-
- System.out.println("Testing HDF.exportDate()");
- HDF date_hdf = new HDF();
- date_hdf.exportDate("DatePST", "US/Pacific", 1142308218);
- date_hdf.exportDate("DateEST", "US/Eastern", 1142308218);
- System.out.println(date_hdf.dump());
-
- // Test default escaping mode: html
- HDF escape_hdf = new HDF();
- System.out.println("Testing escape mode: html");
- System.out.println("Config.VarEscapeMode = \"html\"");
- escape_hdf.setValue("Config.VarEscapeMode", "html");
- cs = new CS(escape_hdf);
-
- System.out.println("Some.HTML = " +
- "<script src=\"some.js\">alert('123');</script>");
- escape_hdf.setValue("Some.HTML",
- "<script src=\"some.js\">alert('123');</script>");
- tmplstr = "Default HTML escaping: <?cs var:Some.HTML ?>\n";
- System.out.println(tmplstr);
- System.out.println("----");
- cs.parseStr(tmplstr);
- System.out.println(cs.render());
-
- // Test default escaping mode: js
- escape_hdf = new HDF();
- System.out.println("Testing escape mode: js");
- System.out.println("Config.VarEscapeMode = \"js\"");
- escape_hdf.setValue("Config.VarEscapeMode", "js");
- cs = new CS(escape_hdf);
-
- System.out.println("Some.HTML = " +
- "<script src=\"some.js\">alert('123');</script>");
- escape_hdf.setValue("Some.HTML",
- "<script src=\"some.js\">alert('123');</script>");
- tmplstr = "Default JS escaping: <?cs var:Some.HTML ?>\n";
- System.out.println(tmplstr);
- System.out.println("----");
- cs.parseStr(tmplstr);
- System.out.println(cs.render());
-
- // Test default escaping mode: url
- escape_hdf = new HDF();
- System.out.println("Testing escape mode: url");
- System.out.println("Config.VarEscapeMode = \"url\"");
- escape_hdf.setValue("Config.VarEscapeMode", "url");
- cs = new CS(escape_hdf);
-
- System.out.println("Some.HTML = " +
- "<script src=\"some.js\">alert('123');</script>");
- escape_hdf.setValue("Some.HTML",
- "<script src=\"some.js\">alert('123');</script>");
- tmplstr = "Default URL escaping: <?cs var:Some.HTML ?>\n";
- System.out.println(tmplstr);
- System.out.println("----");
- cs.parseStr(tmplstr);
- System.out.println(cs.render());
-
- // Test escape blocks
- escape_hdf = new HDF();
- System.out.println("Testing escape blocks: none");
- System.out.println("Config.VarEscapeMode = \"none\"");
- escape_hdf.setValue("Config.VarEscapeMode", "none");
- cs = new CS(escape_hdf);
-
- System.out.println("Some.HTML = " +
- "<script src=\"some.js\">alert('123');</script>");
- escape_hdf.setValue("Some.HTML",
- "<script src=\"some.js\">alert('123');</script>");
- tmplstr = "url escape block: \n" +
- "<?cs escape: \"url\"?>" +
- " <?cs var:Some.HTML ?>" +
- "<?cs /escape ?>\n" +
- "js escape block: \n" +
- "<?cs escape: \"js\"?>" +
- " <?cs var:Some.HTML ?>" +
- "<?cs /escape ?>\n" +
- "html escape block: \n" +
- "<?cs escape: \"html\"?>" +
- " <?cs var:Some.HTML ?>" +
- "<?cs /escape ?>\n";
- System.out.println(tmplstr);
- System.out.println("----");
- cs.parseStr(tmplstr);
- System.out.println(cs.render());
-
- System.out.println("Testing HDF.readFile() with callback\n");
- file_hdf = new HDF();
- file_hdf.setFileLoader(new CSTestLoader());
- file_hdf.readFile("testdata/test1.hdf");
- System.out.println(file_hdf.dump());
-
- System.out.println("Testing CS.parseFile() with callback\n");
- cs = new CS(file_hdf);
- cs.setFileLoader(new CSTestLoader());
- cs.parseFile("testdata/test.cs");
- System.out.println(cs.render());
- }
-};
-
-class CSTestLoader implements CSFileLoader {
- public String load(HDF hdf, String filename) throws IOException {
- System.out.println("CSTestLoader::Load " + filename + "\n");
- String data = readFile(new File(filename));
- System.out.println("---- file begin ----\n" + data +
- "\n---- file end ----\n");
- return data;
- }
-
- private String readFile(File file) throws IOException {
- InputStreamReader fin = new InputStreamReader(new FileInputStream(file),
- "UTF-8");
- StringBuilder sb = new StringBuilder(1024);
- char[] charbuf = new char[1024];
- int len = 0;
- while ((len = fin.read(charbuf)) != -1) {
- sb.append(charbuf, 0, len);
- }
- return sb.toString();
- }
-};
diff --git a/java-jni/CSUtil.java b/java-jni/CSUtil.java
deleted file mode 100644
index 4075c48..0000000
--- a/java-jni/CSUtil.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.clearsilver;
-
-import java.util.LinkedList;
-import java.util.List;
-import java.io.File;
-
-/**
- * Utility class containing helper methods
- *
- * @author smarti@google.com (Sergio Marti)
- */
-public class CSUtil {
-
- private CSUtil() { }
-
- public static final String HDF_LOADPATHS = "hdf.loadpaths";
-
- /**
- * Helper function that returns a concatenation of the loadpaths in the
- * provided HDF.
- * @param hdf an HDF structure containing load paths.
- * @return A list of loadpaths in order in which to search.
- * @throws NullPointerException if no loadpaths are found.
- */
- public static List<String> getLoadPaths(HDF hdf) {
- List<String> list = new LinkedList<String>();
- HDF loadpathsHdf = hdf.getObj(HDF_LOADPATHS);
- if (loadpathsHdf == null) {
- throw new NullPointerException("No HDF loadpaths located in the specified"
- + " HDF structure");
- }
- for (HDF lpHdf = loadpathsHdf.objChild(); lpHdf != null;
- lpHdf = lpHdf.objNext()) {
- list.add(lpHdf.objValue());
- }
- return list;
- }
-
- /**
- * Given an ordered list of directories to look in, locate the specified file.
- * Returns <code>null</code> if file not found.
- * @param loadpaths the ordered list of paths to search.
- * @param filename the name of the file.
- * @return a File object corresponding to the file. <code>null</code> if
- * file not found.
- */
- public static File locateFile(List<String> loadpaths, String filename) {
- if (filename == null) {
- throw new NullPointerException("No filename provided");
- }
- if (loadpaths == null) {
- throw new NullPointerException("No loadpaths provided.");
- }
- for (String path : loadpaths) {
- File file = new File(path, filename);
- if (file.exists()) {
- return file;
- }
- }
- return null;
- }
-}
diff --git a/java-jni/HDF.java b/java-jni/HDF.java
deleted file mode 100644
index 103b7d1..0000000
--- a/java-jni/HDF.java
+++ /dev/null
@@ -1,389 +0,0 @@
-package org.clearsilver;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import java.util.Calendar;
-import java.util.Date;
-import java.util.TimeZone;
-
-/** This class is a wrapper around the HDF C API. Many features of the C API
- * are not yet exposed through this wrapper.
- */
-public class HDF {
- long hdfptr; // stores the C HDF* pointer
- HDF root; // If this is a child HDF node, points at the root node of
- // the tree. For root nodes this is null. A child node needs
- // to hold a reference on the root to prevent the root from
- // being GC-ed.
- static {
- JNI.loadLibrary();
- }
-
- /** Constructs an empty HDF dataset */
- public HDF() {
- hdfptr = _init();
- root = null;
- }
-
- /** Constructs an HDF child node. Used by other methods in this class when
- * a child node needs to be constructed.
- */
- private HDF(long hdfptr, HDF parent) {
- this.hdfptr = hdfptr;
- this.root = (parent.root != null) ? parent.root : parent;
- }
-
- /** Clean up allocated memory if neccesary. close() allows application
- * to force clean up.
- */
- public void close() {
- // Only root nodes have ownership of the C HDF pointer, so only a root
- // node needs to dealloc hdfptr.dir
- if ( root == null) {
- if (hdfptr != 0) {
- _dealloc(hdfptr);
- hdfptr = 0;
- }
- }
- }
-
- /** Call close() just in case when deallocating Java object.
- */
- // Should be protected access (like Object).
- protected void finalize() throws Throwable {
- close();
- super.finalize();
- }
-
- /** Loads the contents of the specified HDF file from disk into the current
- * HDF object. The loaded contents are merged with the existing contents.
- */
- public boolean readFile(String filename) throws IOException,
- FileNotFoundException {
- if (hdfptr == 0) {
- throw new NullPointerException("HDF is closed.");
- }
- return _readFile(hdfptr, filename, fileLoader != null);
- }
-
- protected String fileLoad(String filename) throws IOException,
- FileNotFoundException {
- if (hdfptr == 0) {
- throw new NullPointerException("HDF is closed.");
- }
- CSFileLoader aFileLoader = fileLoader;
- if (aFileLoader == null) {
- throw new NullPointerException("No fileLoader specified.");
- } else {
- String result = aFileLoader.load(this, filename);
- if (result == null) {
- throw new NullPointerException("CSFileLoader.load() returned null");
- }
- return result;
- }
- }
-
- // The optional CS file loader to use to read in files
- private CSFileLoader fileLoader = null;
-
- /**
- * Get the file loader in use, if any.
- * @return the file loader in use.
- */
- public CSFileLoader getFileLoader() {
- return fileLoader;
- }
-
- /**
- * Set the CS file loader to use
- * @param fileLoader the file loader that should be used.
- */
- public void setFileLoader(CSFileLoader fileLoader) {
- this.fileLoader = fileLoader;
- }
-
- /** Serializes HDF contents to a file (readable by readFile)
- */
- public boolean writeFile(String filename) throws IOException {
- if (hdfptr == 0) {
- throw new NullPointerException("HDF is closed.");
- }
- return _writeFile(hdfptr, filename);
- }
-
- /** Serializes HDF contents to a file (readable by readFile), but
- * writes the file atomically by writing to a temp file then doing a
- * rename(2) on it.
- */
- public boolean writeFileAtomic(String filename) throws IOException {
- if (hdfptr == 0) {
- throw new NullPointerException("HDF is closed.");
- }
- return _writeFileAtomic(hdfptr, filename);
- }
-
- /** Parses/loads the contents of the given string as HDF into the current
- * HDF object. The loaded contents are merged with the existing contents.
- */
- public boolean readString(String data) {
- if (hdfptr == 0) {
- throw new NullPointerException("HDF is closed.");
- }
- return _readString(hdfptr, data);
- }
-
- /** Serializes HDF contents to a string (readable by readString)
- */
- public String writeString() {
- if (hdfptr == 0) {
- throw new NullPointerException("HDF is closed.");
- }
- return _writeString(hdfptr);
- }
-
- /** Retrieves the integer value at the specified path in this HDF node's
- * subtree. If the value does not exist, or cannot be converted to an
- * integer, default_value will be returned. */
- public int getIntValue(String hdfname, int default_value) {
- if (hdfptr == 0) {
- throw new NullPointerException("HDF is closed.");
- }
- return _getIntValue(hdfptr,hdfname,default_value);
- }
-
- /** Retrieves the value at the specified path in this HDF node's subtree.
- */
- public String getValue(String hdfname, String default_value) {
- if (hdfptr == 0) {
- throw new NullPointerException("HDF is closed.");
- }
- return _getValue(hdfptr,hdfname,default_value);
- }
-
- /** Sets the value at the specified path in this HDF node's subtree. */
- public void setValue(String hdfname, String value) {
- if (hdfptr == 0) {
- throw new NullPointerException("HDF is closed.");
- }
- _setValue(hdfptr,hdfname,value);
- }
-
- /** Remove the specified subtree. */
- public void removeTree(String hdfname) {
- if (hdfptr == 0) {
- throw new NullPointerException("HDF is closed.");
- }
- _removeTree(hdfptr,hdfname);
- }
-
- /** Links the src hdf name to the dest. */
- public void setSymLink(String hdf_name_src, String hdf_name_dest) {
- if (hdfptr == 0) {
- throw new NullPointerException("HDF is closed.");
- }
- _setSymLink(hdfptr,hdf_name_src,hdf_name_dest);
- }
-
- /** Export a date to a clearsilver tree using a specified timezone */
- public void exportDate(String hdfname, TimeZone timeZone, Date date) {
- if (hdfptr == 0) {
- throw new NullPointerException("HDF is closed.");
- }
-
- Calendar cal = Calendar.getInstance(timeZone);
- cal.setTime(date);
-
- String sec = Integer.toString(cal.get(Calendar.SECOND));
- setValue(hdfname + ".sec", sec.length() == 1 ? "0" + sec : sec);
-
- String min = Integer.toString(cal.get(Calendar.MINUTE));
- setValue(hdfname + ".min", min.length() == 1 ? "0" + min : min);
-
- setValue(hdfname + ".24hour",
- Integer.toString(cal.get(Calendar.HOUR_OF_DAY)));
- // java.util.Calendar uses represents 12 o'clock as 0
- setValue(hdfname + ".hour",
- Integer.toString(
- cal.get(Calendar.HOUR) == 0 ? 12 : cal.get(Calendar.HOUR)));
- setValue(hdfname + ".am",
- cal.get(Calendar.AM_PM) == Calendar.AM ? "1" : "0");
- setValue(hdfname + ".mday",
- Integer.toString(cal.get(Calendar.DAY_OF_MONTH)));
- setValue(hdfname + ".mon",
- Integer.toString(cal.get(Calendar.MONTH)+1));
- setValue(hdfname + ".year",
- Integer.toString(cal.get(Calendar.YEAR)));
- setValue(hdfname + ".2yr",
- Integer.toString(cal.get(Calendar.YEAR)).substring(2));
- setValue(hdfname + ".wday",
- Integer.toString(cal.get(Calendar.DAY_OF_WEEK)));
-
- boolean tzNegative = timeZone.getRawOffset() < 0;
- int tzAbsolute = java.lang.Math.abs(timeZone.getRawOffset()/1000);
- String tzHour = Integer.toString(tzAbsolute/3600);
- String tzMin = Integer.toString(tzAbsolute/60 - (tzAbsolute/3600)*60);
- String tzString = (tzNegative ? "-" : "+")
- + (tzHour.length() == 1 ? "0" + tzHour : tzHour)
- + (tzMin.length() == 1 ? "0" + tzMin : tzMin);
- setValue(hdfname + ".tzoffset", tzString);
- }
-
- /** Export a date to a clearsilver tree using a specified timezone */
- public void exportDate(String hdfname, String tz, int tt) {
- if (hdfptr == 0) {
- throw new NullPointerException("HDF is closed.");
- }
-
- TimeZone timeZone = TimeZone.getTimeZone(tz);
-
- if (timeZone == null) {
- throw new RuntimeException("Unknown timezone: " + tz);
- }
-
- Date date = new Date((long)tt * 1000);
-
- exportDate(hdfname, timeZone, date);
- }
-
- /** Retrieves the HDF object that is the root of the subtree at hdfpath, or
- * null if no object exists at that path. */
- public HDF getObj(String hdfpath) {
- if (hdfptr == 0) {
- throw new NullPointerException("HDF is closed.");
- }
- long obj_ptr = _getObj(hdfptr, hdfpath);
- if ( obj_ptr == 0 ) {
- return null;
- }
- return new HDF(obj_ptr, this);
- }
-
- /** Retrieves the HDF for the first child of the root of the subtree
- * at hdfpath, or null if no child exists of that path or if the
- * path doesn't exist. */
- public HDF getChild(String hdfpath) {
- if (hdfptr == 0) {
- throw new NullPointerException("HDF is closed.");
- }
- long obj_ptr = _getChild(hdfptr, hdfpath);
- if ( obj_ptr == 0 ) {
- return null;
- }
- return new HDF(obj_ptr, this);
- }
-
- /** Return the root of the tree where the current node lies. If the
- * current node is the root, return this. */
- public HDF getRootObj() {
- return root != null ? root : this;
- }
-
- /** Retrieves the HDF object that is the root of the subtree at
- * hdfpath, create the subtree if it doesn't exist */
- public HDF getOrCreateObj(String hdfpath) {
- if (hdfptr == 0) {
- throw new NullPointerException("HDF is closed.");
- }
- long obj_ptr = _getObj(hdfptr, hdfpath);
- if ( obj_ptr == 0 ) {
- // Create a node
- _setValue(hdfptr, hdfpath, "");
- obj_ptr = _getObj( hdfptr, hdfpath );
- if ( obj_ptr == 0 ) {
- return null;
- }
- }
- return new HDF(obj_ptr, this);
- }
-
- /** Returns the name of this HDF node. The root node has no name, so
- * calling this on the root node will return null. */
- public String objName() {
- if (hdfptr == 0) {
- throw new NullPointerException("HDF is closed.");
- }
- return _objName(hdfptr);
- }
-
- /** Returns the value of this HDF node, or null if this node has no value.
- * Every node in the tree can have a value, a child, and a next peer. */
- public String objValue() {
- if (hdfptr == 0) {
- throw new NullPointerException("HDF is closed.");
- }
- return _objValue(hdfptr);
- }
-
- /** Returns the child of this HDF node, or null if there is no child.
- * Use this in conjunction with objNext to walk the HDF tree. Every node
- * in the tree can have a value, a child, and a next peer. */
- public HDF objChild() {
- if (hdfptr == 0) {
- throw new NullPointerException("HDF is closed.");
- }
- long child_ptr = _objChild(hdfptr);
- if ( child_ptr == 0 ) {
- return null;
- }
- return new HDF(child_ptr, this);
- }
-
- /** Returns the next sibling of this HDF node, or null if there is no next
- * sibling. Use this in conjunction with objChild to walk the HDF tree.
- * Every node in the tree can have a value, a child, and a next peer. */
- public HDF objNext() {
- if (hdfptr == 0) {
- throw new NullPointerException("HDF is closed.");
- }
- long next_ptr = _objNext(hdfptr);
- if ( next_ptr == 0 ) {
- return null;
- }
- return new HDF(next_ptr, this);
- }
-
- public void copy(String hdfpath, HDF src) {
- if (hdfptr == 0 || src.hdfptr == 0) {
- throw new NullPointerException("HDF is closed.");
- }
- _copy(hdfptr, hdfpath, src.hdfptr);
- }
-
- /**
- * Generates a string representing the content of the HDF tree rooted at
- * this node.
- */
- public String dump() {
- if (hdfptr == 0) {
- throw new NullPointerException("HDF is closed.");
- }
- return _dump(hdfptr);
- }
-
- private static native long _init();
- private static native void _dealloc(long ptr);
- private native boolean _readFile(long ptr, String filename, boolean use_cb);
- private static native boolean _writeFile(long ptr, String filename);
- private static native boolean _writeFileAtomic(long ptr, String filename);
- private static native boolean _readString(long ptr, String data);
- private static native String _writeString(long ptr);
- private static native int _getIntValue(long ptr, String hdfname,
- int default_value);
- private static native String _getValue(long ptr, String hdfname,
- String default_value);
- private static native void _setValue(long ptr, String hdfname,
- String hdf_value);
- private static native void _removeTree(long ptr, String hdfname);
- private static native void _setSymLink(long ptr, String hdf_name_src,
- String hdf_name_dest);
- private static native long _getObj(long ptr, String hdfpath);
- private static native long _getChild(long ptr, String hdfpath);
- private static native long _objChild(long ptr);
- private static native long _objNext(long ptr);
- private static native String _objName(long ptr);
- private static native String _objValue(long ptr);
- private static native void _copy(long destptr, String hdfpath, long srcptr);
-
- private static native String _dump(long ptr);
-}
diff --git a/java-jni/JNI.java b/java-jni/JNI.java
deleted file mode 100644
index 8ac6f10..0000000
--- a/java-jni/JNI.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package org.clearsilver;
-
-/**
- * Loads the ClearSilver JNI library.
- *
- * <p>By default, it attempts to load the library 'clearsilver-jni' from the
- * path specified in the 'java.library.path' system property.</p>
- *
- * <p>If this fails, the JVM exits with a code of 1. However, this strategy
- * can be changed using {@link #setFailureCallback(Runnable)}.</p>
- */
-public class JNI {
-
- /**
- * Failure callback strategy that writes a message to sysout, then calls
- * System.exit(1).
- */
- public static Runnable EXIT_JVM = new Runnable() {
- public void run() {
- System.out.println("Could not load '" + libraryName + "'");
- System.out.println("java.library.path = "
- + System.getProperty("java.library.path"));
- System.exit(1);
- }
- };
-
- /**
- * Failure callback strategy that throws an UnsatisfiedLinkError, which
- * should be caught be client code.
- */
- public static Runnable THROW_ERROR = new Runnable() {
- public void run() {
- throw new UnsatisfiedLinkError("Could not load '" + libraryName + "'");
- }
- };
-
- private static Runnable failureCallback = EXIT_JVM;
-
- private static Object callbackLock = new Object();
-
- private static String libraryName = "clearsilver-jni";
-
- /**
- * Attempts to load the ClearSilver JNI library.
- *
- * @see #setFailureCallback(Runnable)
- */
- public static void loadLibrary() {
- try {
- System.loadLibrary(libraryName);
- } catch (UnsatisfiedLinkError e) {
- synchronized (callbackLock) {
- if (failureCallback != null) {
- failureCallback.run();
- }
- }
- }
- }
-
- /**
- * Sets a callback for what should happen if the JNI library cannot
- * be loaded. The default is {@link #EXIT_JVM}.
- *
- * @see #EXIT_JVM
- * @see #THROW_ERROR
- */
- public static void setFailureCallback(Runnable failureCallback) {
- synchronized(callbackLock) {
- JNI.failureCallback = failureCallback;
- }
- }
-
- /**
- * Set name of JNI library to load. Default is 'clearsilver-jni'.
- */
- public static void setLibraryName(String libraryName) {
- JNI.libraryName = libraryName;
- }
-
-} \ No newline at end of file
diff --git a/java-jni/Makefile b/java-jni/Makefile
deleted file mode 100644
index 390bdf5..0000000
--- a/java-jni/Makefile
+++ /dev/null
@@ -1,90 +0,0 @@
-
-.SUFFIXES: .java .class
-
-ifeq ($(NEOTONIC_ROOT),)
-NEOTONIC_ROOT = ..
-endif
-
-include $(NEOTONIC_ROOT)/rules.mk
-
-NEO_UTIL_SO = libclearsilver-jni.so
-ifeq ($(OSTYPE),Darwin)
-NEO_UTIL_SO = libclearsilver-jni.jnilib
-endif
-NEO_UTIL_JAVA_SRC = HDF.java CS.java CSUtil.java CSFileLoader.java JNI.java # CGI.java
-
-NEO_UTIL_JAVA_JAR = clearsilver.jar
-NEO_UTIL_SRC = j_neo_util.c j_neo_cs.c
-NEO_UTIL_OBJ = $(NEO_UTIL_SRC:%.c=%.o)
-
-CFLAGS += $(JAVA_INCLUDE_PATH)
-DLIBS += -lneo_cgi -lneo_cs -lneo_utl
-LIBS += $(DLIBS)
-ifneq ($(OSTYPE),Darwin)
-LDFLAGS += -Wl,-soname=$(NEO_UTIL_SO)
-endif
-
-TARGETS = org_clearsilver_HDF.h org_clearsilver_CS.h $(NEO_UTIL_SO)
-
-all: $(TARGETS) test
-
-$(NEO_UTIL_JAVA_JAR): $(NEO_UTIL_JAVA_SRC)
- $(MKDIR) org/clearsilver
- $(JAVAC) -d . $(NEO_UTIL_JAVA_SRC)
- $(JAR) cf $(NEO_UTIL_JAVA_JAR) org
- $(RM) -r org
-
-org_clearsilver_HDF.h: $(NEO_UTIL_JAVA_JAR)
- $(JAVAH) -classpath $(NEO_UTIL_JAVA_JAR) -jni org.clearsilver.HDF
-
-org_clearsilver_CS.h: $(NEO_UTIL_JAVA_JAR)
- $(JAVAH) -classpath $(NEO_UTIL_JAVA_JAR) -jni org.clearsilver.CS
-
-CSTest.class: CSTest.java
- $(JAVAC) -classpath $(NEO_UTIL_JAVA_JAR) CSTest.java
-
-gold: CSTest.class
- @/bin/sh -c "LD_LIBRARY_PATH=$(NEOTONIC_ROOT)/java-jni; export LD_LIBRARY_PATH; CLASSPATH=$(NEO_UTIL_JAVA_JAR):.; export CLASSPATH; $(JAVA_PATH)/bin/java CSTest" > javatest.gold
- @echo "Generated gold files"
-
-test: CSTest.class
- @echo "Running java test"
- @failed=0; \
- rm -f javatest.out; \
- LD_LIBRARY_PATH=$(NEOTONIC_ROOT)/java-jni; export LD_LIBRARY_PATH; \
- CLASSPATH=$(NEO_UTIL_JAVA_JAR):.; export CLASSPATH; \
- $(JAVA_PATH)/bin/java CSTest > javatest.out; \
- diff javatest.out javatest.gold > /dev/null 2>&1; \
- return_code=$$?; \
- if [ $$return_code -ne 0 ]; then \
- diff javatest.out javatest.gold > javatest.err; \
- echo "Failed Java Test: CSTest"; \
- echo " See javatest.out and javatest.err"; \
- failed=1; \
- fi; \
- if [ $$failed -eq 1 ]; then \
- exit 1; \
- fi;
- @echo "Passed java test"
-
-CGI.h: CGI.class
- $(JAVAH) -jni CGI
-
-$(NEO_UTIL_SO): $(NEO_UTIL_JAVA_JAR) $(NEO_UTIL_OBJ) $(DEP_LIBS)
- $(LDSHARED) -o $@ $(LDFLAGS) $(NEO_UTIL_OBJ) $(LIBS)
-
-# I guess we'll just stick the .jar file in the lib directory
-install: all
- $(INSTALL) $(NEO_UTIL_SO) $(DESTDIR)$(libdir)
- $(INSTALL) $(NEO_UTIL_JAVA_JAR) $(DESTDIR)$(libdir)
-
-clean:
- $(RM) *.o *.so
- $(RM) -r org
- $(RM) org_clearsilver_*.h
- $(RM) *.class
- $(RM) org_clearsilver_HDF.h org_clearsilver_CS.h
- $(RM) Makefile.depends
-
-distclean: clean
- $(RM) -f Makefile.depends $(TARGETS)
diff --git a/java-jni/README-bin.txt b/java-jni/README-bin.txt
deleted file mode 100644
index 42d5572..0000000
--- a/java-jni/README-bin.txt
+++ /dev/null
@@ -1,33 +0,0 @@
----------------------------------
-Clearsilver JavaJNI wrapper
-by David Jeske
-Distributed under the Neotonic ClearSilver License
-----------------------------------
-
-This is a binary compile of a Java JNI wrapper for the ClearSilver
-templating library. This version is compiled on:
-
- x86 Linux (Linux 2.2.x - RedHat 6.2)
-
-INSTALLING
-
-You must put the native library (libclearsilver-jni.so) into a standard
-library location (i.e. like /lib), or make sure that Java can
-find it by using the java command line directive:
-
- -Djava.library.path=/somewhere/else
-
-Then you must put the clearsilver.jar file into your java
-CLASSPATH.
-
-USING
-
-See the example CSTest.java for an example of how to import
-and use the clearsilver objects.
-
-USING in a servlet
-
-Since the most common usage of Clearsilver is in a servlet,
-we've provided some examples of how to use it in the servlet/
-directory.
--
diff --git a/java-jni/README.txt b/java-jni/README.txt
deleted file mode 100644
index 1c5cbf4..0000000
--- a/java-jni/README.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-----------------------------------
-Clearsilver JavaJNI wrapper
-by David Jeske
-Distributed under the Neotonic ClearSilver License
-----------------------------------
-
-This is a Java Native Interface (JNI) wrapper for the ClearSilver
-templating library. The files in this directory build into both
-a clearsilver.jar file with Java classes, and a native library
-libclearsilver-jni.so.
-
-BUILDING
-
-After building clearsilver, just type "make" twice. The first
-time you build it builds the depend, and throw some random error,
-I don't know why.
-
-INSTALLING
-
-You must put the native library into a standard library location
-(i.e. like /lib), or make sure that Java can find it by using
-the java command line directive:
-
- -Djava.library.path=/somewhere/else
-
-Then you must put the clearsilver.jar file into your java
-CLASSPATH.
-
-USING
-
-See the example CSTest.java for an example of how to import
-and use the clearsilver objects.
-
-USING in a servlet
-
-Since the most common usage of Clearsilver is in a servlet,
-we've provided some examples of how to use it in the servlet/
-directory.
-
-
diff --git a/java-jni/clearsilver.jar b/java-jni/clearsilver.jar
deleted file mode 100644
index 5d6fcd0..0000000
--- a/java-jni/clearsilver.jar
+++ /dev/null
Binary files differ
diff --git a/java-jni/j_neo_cgi.c b/java-jni/j_neo_cgi.c
deleted file mode 100644
index 9fb8ee5..0000000
--- a/java-jni/j_neo_cgi.c
+++ /dev/null
@@ -1,43 +0,0 @@
-#include <jni.h>
-#include "CGI.h"
-
-#include "cs_config.h"
-#include "util/neo_err.h"
-#include "util/neo_misc.h"
-#include "util/neo_str.h"
-#include "util/neo_hdf.h"
-#include "cgi/cgi.h"
-#include "cgi/cgiwrap.h"
-#include "cgi/date.h"
-#include "cgi/html.h"
-
-
-jfieldID _cgiobjFldID = NULL;
-
-int jNeoErr (JNIEnv *env, NEOERR *err);
-
-JNIEXPORT jint JNICALL Java_CGI__1init
- (JNIEnv *env, jobject obj) {
- CGI *cgi = NULL;
- NEOERR *err;
-
- if (!_cgiobjFldID) {
- jclass objClass = (*env)->GetObjectClass(env,obj);
- _cgiobjFldID = (*env)->GetFieldID(env,objClass,"_cgiobj","I");
- }
-
- err = cgi_init(&cgi,NULL);
- if (err) return jNeoErr(env,err);
- return (jint) cgi;
- }
-
-JNIEXPORT void JNICALL Java_CGI_parse
- (JNIEnv *env, jobject obj) {
- NEOERR *err;
- CGI *cgi = (CGI *)((*env)->GetIntField(env,obj,_cgiobjFldID));
-
- err = cgi_parse(cgi);
- if (err) { jNeoErr(env,err); return; }
-
-}
-
diff --git a/java-jni/j_neo_cs.c b/java-jni/j_neo_cs.c
deleted file mode 100644
index f578566..0000000
--- a/java-jni/j_neo_cs.c
+++ /dev/null
@@ -1,180 +0,0 @@
-#include <string.h>
-
-#include <jni.h>
-#include "org_clearsilver_CS.h"
-
-#include "cs_config.h"
-#include "util/neo_err.h"
-#include "util/neo_misc.h"
-#include "util/neo_str.h"
-#include "util/neo_hdf.h"
-#include "cgi/cgi.h"
-#include "cgi/cgiwrap.h"
-#include "cgi/date.h"
-#include "cgi/html.h"
-#include "cs/cs.h"
-
-#include "j_neo_util.h"
-
-jfieldID _csobjFldID = NULL;
-
-static void jErr(JNIEnv *env, char *error_string) {
- jclass newExcCls = (*env)->FindClass(env, "java/lang/RuntimeException");
- if (newExcCls == 0) {
- // unable to find proper class!
- return;
- }
-
- (*env)->ThrowNew(env, newExcCls, error_string);
-}
-
-int jNeoErr (JNIEnv *env, NEOERR *err);
-
-JNIEXPORT jlong JNICALL Java_org_clearsilver_CS__1init
- (JNIEnv *env, jobject obj, jlong hdf_obj_ptr) {
- HDF *hdf = (HDF *)hdf_obj_ptr;
- CSPARSE *cs = NULL;
- NEOERR *err;
-
- // if (!_hdfobjFldID) {
- // jclass objClass = (*env)->GetObjectClass(env,obj);
- // _hdfobjFldID = (*env)->GetFieldID(env,objClass,"hdfptr","i");
- // }
-
- err = cs_init(&cs, hdf);
- if (err != STATUS_OK) return jNeoErr(env,err);
- err = cgi_register_strfuncs(cs);
- if (err != STATUS_OK) return jNeoErr(env,err);
-
- return (jlong) cs;
-}
-
-JNIEXPORT void JNICALL Java_org_clearsilver_CS__1dealloc
-(JNIEnv *env, jclass objClass, jlong cs_obj_ptr) {
- CSPARSE *cs = (CSPARSE *)cs_obj_ptr;
- cs_destroy(&cs);
-}
-
-
-JNIEXPORT void JNICALL Java_org_clearsilver_CS__1parseFile(JNIEnv *env,
- jobject objCS, jlong cs_obj_ptr, jstring j_filename, jboolean use_cb) {
- CSPARSE *cs = (CSPARSE *)cs_obj_ptr;
- NEOERR *err;
- const char *filename;
- FILELOAD_INFO fl_info;
-
- if (!j_filename) { return; } // throw
-
- if (use_cb == JNI_TRUE) {
- jclass csClass;
- csClass = (*env)->GetObjectClass(env, objCS);
- if (csClass == NULL) return;
- fl_info.env = env;
- fl_info.fl_obj = objCS;
- fl_info.hdf = cs->hdf;
- fl_info.fl_method = (*env)->GetMethodID(env, csClass,
- "fileLoad", "(Ljava/lang/String;)Ljava/lang/String;");
- if (fl_info.fl_method == NULL) return;
- cs_register_fileload(cs, &fl_info, jni_fileload_cb);
- }
-
- filename = (*env)->GetStringUTFChars(env,j_filename,0);
-
- err = cs_parse_file(cs,(char *)filename);
- if (use_cb == JNI_TRUE) cs_register_fileload(cs, NULL, NULL);
- if (err != STATUS_OK) { jNeoErr(env,err); return; }
-
-
- (*env)->ReleaseStringUTFChars(env,j_filename,filename);
-
-}
-
-JNIEXPORT void JNICALL Java_org_clearsilver_CS__1parseStr
-(JNIEnv *env, jclass objClass, jlong cs_obj_ptr,
- jstring j_contentstring) {
-
- CSPARSE *cs = (CSPARSE *)cs_obj_ptr;
- NEOERR *err;
- char *ms;
- int len;
- const char *contentstring;
-
- if (!j_contentstring) { return; } // throw
-
- contentstring = (*env)->GetStringUTFChars(env,j_contentstring,0);
-
- ms = strdup(contentstring);
- if (ms == NULL) { jErr(env, "parseStr failed"); return; } // throw error no memory
- len = strlen(ms);
-
- err = cs_parse_string(cs,ms,len);
- if (err) { jNeoErr(env,err); return; }
-
- (*env)->ReleaseStringUTFChars(env,j_contentstring,contentstring);
-
-}
-
-static NEOERR *render_cb (void *ctx, char *buf)
-{
- STRING *str= (STRING *)ctx;
-
- return nerr_pass(string_append(str, buf));
-}
-
-
-JNIEXPORT jstring JNICALL Java_org_clearsilver_CS__1render
-(JNIEnv *env, jclass objClass, jlong cs_obj_ptr) {
- CSPARSE *cs = (CSPARSE *)cs_obj_ptr;
- STRING str;
- NEOERR *err;
- jstring retval;
- int ws_strip_level = 0;
- int do_debug = 0;
-
- // TODO: perhaps we should pass in whether this is html as well...
- do_debug = hdf_get_int_value(cs->hdf, "ClearSilver.DisplayDebug", 0);
- ws_strip_level = hdf_get_int_value(cs->hdf, "ClearSilver.WhiteSpaceStrip", 0);
-
- string_init(&str);
- err = cs_render(cs, &str, render_cb);
- if (err) {
- string_clear(&str);
- jNeoErr(env,err);
- return NULL;
- }
-
- if (ws_strip_level) {
- cgi_html_ws_strip(&str, ws_strip_level);
- }
-
- if (do_debug) {
- do {
- err = string_append (&str, "<hr>");
- if (err != STATUS_OK) break;
- err = string_append (&str, "<pre>");
- if (err != STATUS_OK) break;
- err = hdf_dump_str (cs->hdf, NULL, 0, &str);
- if (err != STATUS_OK) break;
- err = string_append (&str, "</pre>");
- if (err != STATUS_OK) break;
- } while (0);
- if (err) {
- string_clear(&str);
- jNeoErr(env,err);
- return NULL;
- }
- }
-
- retval = (*env)->NewStringUTF(env, str.buf);
- string_clear(&str);
-
- return retval;
-}
-
-// Change global HDF
-JNIEXPORT void JNICALL Java_org_clearsilver_CS__1setGlobalHdf
-(JNIEnv *env, jobject objclass, jlong cs_obj_ptr, jlong hdf_obj_ptr) {
- HDF *hdf = (HDF *)hdf_obj_ptr;
- CSPARSE *cs = (CSPARSE *)cs_obj_ptr;
- cs->global_hdf = hdf;
-}
diff --git a/java-jni/j_neo_util.c b/java-jni/j_neo_util.c
deleted file mode 100644
index 11e0465..0000000
--- a/java-jni/j_neo_util.c
+++ /dev/null
@@ -1,477 +0,0 @@
-#include <string.h>
-#include <jni.h>
-#include "org_clearsilver_HDF.h"
-
-#include "cs_config.h"
-#include "util/neo_err.h"
-#include "util/neo_misc.h"
-#include "util/neo_str.h"
-#include "util/neo_hdf.h"
-#include "cgi/cgi.h"
-#include "cgi/cgiwrap.h"
-#include "cgi/date.h"
-#include "cgi/html.h"
-
-#include "j_neo_util.h"
-
-void throwException(JNIEnv *env, const char* class_name, const char *message) {
- jclass ex_class = (*env)->FindClass(env, class_name);
- if (ex_class == NULL) {
- // Unable to find proper class!
- return;
- }
- (*env)->ThrowNew(env, ex_class, message);
-}
-
-void throwNullPointerException(JNIEnv *env, const char *message) {
- throwException(env, "java/lang/NullPointerException", message);
-}
-
-void throwRuntimeException(JNIEnv *env, const char *message) {
- throwException(env, "java/lang/RuntimeException", message);
-}
-
-void throwIOException(JNIEnv *env, const char *message) {
- throwException(env, "java/io/IOException", message);
-}
-
-void throwFileNotFoundException(JNIEnv *env, const char *message) {
- throwException(env, "java/io/FileNotFoundException", message);
-}
-
-void throwOutOfMemoryError(JNIEnv *env, const char *message) {
- throwException(env, "java/lang/OutOfMemoryError", message);
-}
-
-// Throws a runtime exception back to the Java VM appropriate for the type of
-// error and frees the NEOERR that is passed in.
-// TODO: throw more specific exceptions for errors like NERR_IO and NERR_NOMEM
-int jNeoErr(JNIEnv *env, NEOERR *err) {
- STRING str;
-
- string_init(&str);
- if (nerr_match(err, NERR_PARSE)) {
- nerr_error_string(err, &str);
- throwRuntimeException(env, str.buf);
- } else if (nerr_match(err, NERR_IO)) {
- nerr_error_string(err, &str);
- throwIOException(env, str.buf);
- } else if (nerr_match(err, NERR_NOMEM)) {
- nerr_error_string(err, &str);
- throwOutOfMemoryError(env, str.buf);
- } else {
- nerr_error_traceback(err, &str);
- throwRuntimeException(env, str.buf);
- }
-
- nerr_ignore(&err); // free err, otherwise it would leak
- string_clear(&str);
-
- return 0;
-}
-
-JNIEXPORT jlong JNICALL Java_org_clearsilver_HDF__1init(
- JNIEnv *env, jclass objClass) {
- HDF *hdf = NULL;
- NEOERR *err;
-
- err = hdf_init(&hdf);
- if (err != STATUS_OK) {
- return jNeoErr(env, err);
- }
- return (jlong) hdf;
-}
-
-JNIEXPORT void JNICALL Java_org_clearsilver_HDF__1dealloc(
- JNIEnv *env, jclass objClass, jlong hdf_obj_ptr) {
- HDF *hdf = (HDF *)hdf_obj_ptr;
- hdf_destroy(&hdf);
-}
-
-JNIEXPORT jint JNICALL Java_org_clearsilver_HDF__1getIntValue(
- JNIEnv *env, jclass objClass, jlong hdf_obj_ptr, jstring j_hdfname,
- jint default_value) {
- HDF *hdf = (HDF *)hdf_obj_ptr;
- int r;
- const char *hdfname;
-
- if (!j_hdfname) {
- throwNullPointerException(env, "hdfname argument was null");
- return 0;
- }
-
- hdfname = (*env)->GetStringUTFChars(env,j_hdfname, 0);
-
- r = hdf_get_int_value(hdf, hdfname, default_value);
-
- (*env)->ReleaseStringUTFChars(env,j_hdfname,hdfname);
- return r;
-}
-
-JNIEXPORT jstring JNICALL Java_org_clearsilver_HDF__1getValue(
- JNIEnv *env, jclass objClass, jlong hdf_obj_ptr, jstring j_hdfname,
- jstring j_default_value) {
- HDF *hdf = (HDF *)hdf_obj_ptr;
- const char *r;
- const char *hdfname;
- const char *default_value;
- jstring retval;
-
- if (!j_hdfname) {
- throwNullPointerException(env, "hdfname argument was null");
- return 0;
- }
- hdfname = (*env)->GetStringUTFChars(env,j_hdfname,0);
- if (!j_default_value) {
- default_value = NULL;
- } else {
- default_value = (*env)->GetStringUTFChars(env, j_default_value, 0);
- }
-
- r = hdf_get_value(hdf, hdfname, default_value);
-
- (*env)->ReleaseStringUTFChars(env, j_hdfname, hdfname);
- retval = (r ? (*env)->NewStringUTF(env, r) : 0);
- if (default_value) {
- (*env)->ReleaseStringUTFChars(env, j_default_value, default_value);
- }
- return retval;
-}
-
-JNIEXPORT void JNICALL Java_org_clearsilver_HDF__1setValue(
- JNIEnv *env, jclass objClass,
- jlong hdf_obj_ptr, jstring j_hdfname, jstring j_value) {
- HDF *hdf = (HDF *)hdf_obj_ptr;
- NEOERR *err;
- const char *hdfname;
- const char *value;
-
- if (!j_hdfname) {
- throwNullPointerException(env, "hdfname argument was null");
- return;
- }
- hdfname = (*env)->GetStringUTFChars(env, j_hdfname, 0);
- if (j_value) {
- value = (*env)->GetStringUTFChars(env, j_value, 0);
- } else {
- value = NULL;
- }
- err = hdf_set_value(hdf, hdfname, value);
-
- (*env)->ReleaseStringUTFChars(env, j_hdfname, hdfname);
- if (value) {
- (*env)->ReleaseStringUTFChars(env, j_value, value);
- }
-
- if (err != STATUS_OK) {
- // Throw an exception
- jNeoErr(env, err);
- }
-}
-
-JNIEXPORT void JNICALL Java_org_clearsilver_HDF__1removeTree(
- JNIEnv *env, jclass objClass,
- jlong hdf_obj_ptr, jstring j_hdfname) {
- HDF *hdf = (HDF *)hdf_obj_ptr;
- NEOERR *err;
- const char *hdfname;
-
- if (!j_hdfname) {
- throwNullPointerException(env, "hdfname argument was null");
- return;
- }
- hdfname = (*env)->GetStringUTFChars(env, j_hdfname, 0);
- err = hdf_remove_tree(hdf, hdfname);
-
- (*env)->ReleaseStringUTFChars(env, j_hdfname, hdfname);
-
- if (err != STATUS_OK) {
- // Throw an exception
- jNeoErr(env, err);
- }
-}
-
-JNIEXPORT void JNICALL Java_org_clearsilver_HDF__1setSymLink(
- JNIEnv *env, jclass objClass,
- jlong hdf_obj_ptr, jstring j_hdf_name_src, jstring j_hdf_name_dest) {
- HDF *hdf = (HDF *)hdf_obj_ptr;
- NEOERR *err;
- const char *hdf_name_src;
- const char *hdf_name_dest;
-
- if (!j_hdf_name_src) {
- throwNullPointerException(env, "hdf_name_src argument was null");
- return;
- }
- hdf_name_src = (*env)->GetStringUTFChars(env, j_hdf_name_src, 0);
-
- if (!j_hdf_name_dest) {
- throwNullPointerException(env, "hdf_name_dest argument was null");
- return;
- }
- hdf_name_dest = (*env)->GetStringUTFChars(env, j_hdf_name_dest, 0);
-
- err = hdf_set_symlink(hdf, hdf_name_src, hdf_name_dest);
-
- (*env)->ReleaseStringUTFChars(env, j_hdf_name_src, hdf_name_src);
- (*env)->ReleaseStringUTFChars(env, j_hdf_name_dest, hdf_name_dest);
-
- if (err != STATUS_OK) {
- // Throw an exception
- jNeoErr(env, err);
- }
-}
-
-JNIEXPORT jstring JNICALL Java_org_clearsilver_HDF__1dump(
- JNIEnv *env, jclass objClass,
- jlong hdf_obj_ptr) {
- HDF *hdf = (HDF *)hdf_obj_ptr;
- NEOERR *err;
- STRING str;
- jstring retval;
-
- string_init(&str);
- err = hdf_dump_str(hdf, NULL, 0, &str);
- if (err != STATUS_OK) {
- // Throw an exception
- jNeoErr(env, err);
- retval = NULL;
- } else {
- retval = (*env)->NewStringUTF(env,str.buf);
- }
- string_clear(&str);
-
- return retval;
-}
-
-NEOERR *jni_fileload_cb(void *ctx, HDF *hdf, const char *filename,
- char **contents) {
- FILELOAD_INFO *info = (FILELOAD_INFO *)ctx;
- jstring filename_str;
- jstring loaded_string;
- const char *c_loaded_string;
-
- // We assume that the hdf passed back is actually the hdf we already
- // have...
- if (hdf != info->hdf)
- return nerr_raise(NERR_ASSERT,
- "jni_fileload_cb: passed HDF pointer doesn't match hdf_obj_ptr");
-
- filename_str = (*info->env)->NewStringUTF(info->env, filename);
- (*info->env)->NewLocalRef(info->env, filename_str);
-
- loaded_string = (*info->env)->CallObjectMethod(info->env, info->fl_obj,
- info->fl_method, filename_str);
- if ((*info->env)->ExceptionCheck(info->env)) {
- (*info->env)->ExceptionDescribe(info->env);
- (*info->env)->ExceptionClear(info->env);
- return nerr_raise(NERR_ASSERT,
- "jni_fileload_cb: HDF.fileLoad returned exception, see STDERR");
- }
- c_loaded_string = (*info->env)->GetStringUTFChars(info->env, loaded_string,
- 0);
- if (c_loaded_string) {
- *contents = strdup(c_loaded_string);
- }
- (*info->env)->ReleaseStringUTFChars(info->env, loaded_string,
- c_loaded_string);
-
- return STATUS_OK;
-}
-
-JNIEXPORT jboolean JNICALL Java_org_clearsilver_HDF__1readFile(
- JNIEnv *env, jobject objClass, jlong hdf_obj_ptr, jstring j_filename,
- jboolean use_cb) {
- HDF *hdf = (HDF *)hdf_obj_ptr;
- NEOERR *err;
- const char *filename;
- jboolean retval;
- FILELOAD_INFO fl_info;
-
- if (use_cb == JNI_TRUE) {
- jclass hdfClass;
-
- fl_info.env = env;
- fl_info.fl_obj = objClass;
- fl_info.hdf = hdf;
-
- hdfClass = (*env)->GetObjectClass(env, objClass);
- if (hdfClass == NULL) return JNI_FALSE;
-
- fl_info.fl_method = (*env)->GetMethodID(env, hdfClass,
- "fileLoad", "(Ljava/lang/String;)Ljava/lang/String;");
- if (fl_info.fl_method == NULL) return JNI_FALSE;
-
- hdf_register_fileload(hdf, &fl_info, jni_fileload_cb);
- }
-
- filename = (*env)->GetStringUTFChars(env, j_filename, 0);
- err = hdf_read_file(hdf, filename);
- (*env)->ReleaseStringUTFChars(env, j_filename, filename);
- if (use_cb == JNI_TRUE) hdf_register_fileload(hdf, NULL, NULL);
- if (err != STATUS_OK) {
- // Throw an exception. jNeoErr handles all types of errors other than
- // NOT_FOUND, since that can mean different things in different contexts.
- // In this context, it means "file not found".
- if (nerr_match(err, NERR_NOT_FOUND)) {
- STRING str;
- string_init(&str);
- nerr_error_string(err, &str);
- throwFileNotFoundException(env, str.buf);
- string_clear(&str);
- } else {
- jNeoErr(env, err);
- }
- }
- retval = (err == STATUS_OK);
- return retval;
-}
-
-JNIEXPORT jboolean JNICALL Java_org_clearsilver_HDF__1writeFile(
- JNIEnv *env, jobject objClass, jlong hdf_obj_ptr, jstring j_filename) {
- HDF *hdf = (HDF *)hdf_obj_ptr;
- NEOERR *err;
- const char *filename;
- jboolean retval;
-
- filename = (*env)->GetStringUTFChars(env, j_filename, 0);
- err = hdf_write_file(hdf, filename);
- (*env)->ReleaseStringUTFChars(env, j_filename, filename);
- if (err != STATUS_OK) {
- jNeoErr(env, err);
- }
- retval = (err == STATUS_OK);
- return retval;
-}
-
-JNIEXPORT jboolean JNICALL Java_org_clearsilver_HDF__1writeFileAtomic(
- JNIEnv *env, jobject objClass, jlong hdf_obj_ptr, jstring j_filename) {
- HDF *hdf = (HDF *)hdf_obj_ptr;
- NEOERR *err;
- const char *filename;
- jboolean retval;
-
- filename = (*env)->GetStringUTFChars(env, j_filename, 0);
- err = hdf_write_file_atomic(hdf, filename);
- (*env)->ReleaseStringUTFChars(env, j_filename, filename);
- if (err != STATUS_OK) {
- jNeoErr(env, err);
- }
- retval = (err == STATUS_OK);
- return retval;
-}
-
-JNIEXPORT jboolean JNICALL Java_org_clearsilver_HDF__1readString(
- JNIEnv *env, jobject objClass, jlong hdf_obj_ptr, jstring j_data) {
- HDF *hdf = (HDF *)hdf_obj_ptr;
- NEOERR *err;
- const char *data;
- jboolean retval;
-
- data = (*env)->GetStringUTFChars(env, j_data, 0);
- err = hdf_read_string(hdf, data);
- (*env)->ReleaseStringUTFChars(env, j_data, data);
- if (err != STATUS_OK) {
- jNeoErr(env, err);
- }
- retval = (err == STATUS_OK);
- return retval;
-}
-
-JNIEXPORT jstring JNICALL Java_org_clearsilver_HDF__1writeString(
- JNIEnv *env, jclass objClass, jlong hdf_obj_ptr) {
- HDF *hdf = (HDF *)hdf_obj_ptr;
- NEOERR *err;
- char *output = NULL;
- jstring retval = NULL;
-
- err = hdf_write_string(hdf, &output);
- if (err != STATUS_OK) {
- jNeoErr(env, err);
- } else if (output) {
- retval = (*env)->NewStringUTF(env, output);
- free(output);
- }
- return retval;
-}
-
-JNIEXPORT jlong JNICALL Java_org_clearsilver_HDF__1getObj(
- JNIEnv *env, jclass objClass, jlong hdf_obj_ptr, jstring j_hdf_path) {
- HDF *hdf = (HDF *)hdf_obj_ptr;
- HDF *obj_hdf = NULL;
- const char *hdf_path;
-
- hdf_path = (*env)->GetStringUTFChars(env, j_hdf_path, 0);
- obj_hdf = hdf_get_obj(hdf, (char*)hdf_path);
- (*env)->ReleaseStringUTFChars(env, j_hdf_path, hdf_path);
- return (jlong)obj_hdf;
-}
-
-JNIEXPORT jlong JNICALL Java_org_clearsilver_HDF__1getChild(
- JNIEnv *env, jclass objClass, jlong hdf_obj_ptr, jstring j_hdf_path) {
- HDF *hdf = (HDF *)hdf_obj_ptr;
- HDF *obj_hdf = NULL;
- const char *hdf_path;
-
- hdf_path = (*env)->GetStringUTFChars(env, j_hdf_path, 0);
- obj_hdf = hdf_get_child(hdf, (char*)hdf_path);
- (*env)->ReleaseStringUTFChars(env, j_hdf_path, hdf_path);
- return (jlong)obj_hdf;
-}
-
-JNIEXPORT jlong JNICALL Java_org_clearsilver_HDF__1objChild(
- JNIEnv *env, jclass objClass, jlong hdf_obj_ptr) {
- HDF *hdf = (HDF *)hdf_obj_ptr;
- HDF *child_hdf = NULL;
-
- child_hdf = hdf_obj_child(hdf);
- return (jlong)child_hdf;
-}
-
-JNIEXPORT jlong JNICALL Java_org_clearsilver_HDF__1objNext(
- JNIEnv *env, jclass objClass, jlong hdf_obj_ptr) {
- HDF *hdf = (HDF *)hdf_obj_ptr;
- HDF *next_hdf = NULL;
-
- next_hdf = hdf_obj_next(hdf);
- return (jlong)next_hdf;
-}
-
-JNIEXPORT jstring JNICALL Java_org_clearsilver_HDF__1objName(
- JNIEnv *env, jclass objClass, jlong hdf_obj_ptr) {
- HDF *hdf = (HDF *)hdf_obj_ptr;
- char *name;
- jstring retval = NULL;
-
- name = hdf_obj_name(hdf);
- if (name != NULL) {
- retval = (*env)->NewStringUTF(env, name);
- }
- return retval;
-}
-
-JNIEXPORT jstring JNICALL Java_org_clearsilver_HDF__1objValue(
- JNIEnv *env, jclass objClass, jlong hdf_obj_ptr) {
- HDF *hdf = (HDF *)hdf_obj_ptr;
- char *name;
- jstring retval = NULL;
-
- name = hdf_obj_value(hdf);
- if (name != NULL) {
- retval = (*env)->NewStringUTF(env, name);
- }
- return retval;
-}
-
-JNIEXPORT void JNICALL Java_org_clearsilver_HDF__1copy
- (JNIEnv *env, jclass objClass, jlong hdf_dest_ptr, jstring j_hdf_path,
- jlong hdf_src_ptr) {
- HDF *dest = (HDF *)hdf_dest_ptr;
- HDF *src = (HDF *)hdf_src_ptr;
- const char *hdf_path;
-
- hdf_path = (*env)->GetStringUTFChars(env, j_hdf_path, 0);
- hdf_copy(dest, hdf_path, src);
- (*env)->ReleaseStringUTFChars(env, j_hdf_path, hdf_path);
-}
-
diff --git a/java-jni/j_neo_util.h b/java-jni/j_neo_util.h
deleted file mode 100644
index b6137ba..0000000
--- a/java-jni/j_neo_util.h
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2006 Brandon Long
-// All Rights Reserved.
-//
-// This code is made available under the terms of the ClearSilver License.
-// http://www.clearsilver.net/license.hdf
-
-#ifndef __J_NEO_UTIL_H_
-#define __J_NEO_UTIL_H_ 1
-
-typedef struct _fileload_info {
- JNIEnv *env;
- jobject fl_obj;
- HDF *hdf;
- jmethodID fl_method;
-} FILELOAD_INFO;
-
-NEOERR *jni_fileload_cb(void *ctx, HDF *hdf, const char *filename,
- char **contents);
-
-#endif // __J_NEO_UTIL_H_
diff --git a/java-jni/javatest.gold b/java-jni/javatest.gold
deleted file mode 100644
index 42662f3..0000000
--- a/java-jni/javatest.gold
+++ /dev/null
@@ -1,206 +0,0 @@
-Testing HDF set and dump
-
-Foo.Bar = 10
-Foo.Baz = 20
-
-Testing HDF get
-
-10
-20
-----
-Testing HDF setSymLink
-
-20
-----
-Testing HDF get where default value is null
-
-foo = 10
-foo = null
-----
-Testing HDF get int
-
-10
-----
-Testing HDF parse/render
-
-Foo.Bar:<?cs var:Foo.Bar ?>
-Foo.Baz:<?cs var:Foo.Baz ?>
-
-----
-Foo.Bar:10
-Foo.Baz:20
-
-Testing registered string functions
-
-Foo.Bar:10
-Foo.Baz:20
- abc%26+231%3C%3E%2F%3F abc&amp; 231&lt;&gt;/?
-Testing white space stripping
-
- 10 This is a string without whitespace stripped
- 10 This is a string without whitespace stripped
-Testing debug dump
-
- 10 This is a string without whitespace stripped<hr><pre>Foo.Bar = 10
-Foo.Baz = 20
-Foo.Baz2 : Foo.Baz
-Foo.EscapeTest = abc& 231<>/?
-ClearSilver.WhiteSpaceStrip = 1
-ClearSilver.DisplayDebug = 1
-</pre>
-Final HDF dump
-
-Foo.Bar = 10
-Foo.Baz = 20
-Foo.Baz2 : Foo.Baz
-Foo.EscapeTest = abc& 231<>/?
-ClearSilver.WhiteSpaceStrip = 1
-ClearSilver.DisplayDebug = 1
-
-Testing HDF.readFile()
-
-Foo.Bar = 10
-Foo.Baz = 20
-
-Testing HDF.readFile() for a file that doesn't exist
-Caught exception of type java.io.FileNotFoundException
-
-Testing HDF.writeFile()
-
-Testing HDF.writeString()
-
-Foo {
-Bar = 10
-Baz = 20
-}
-
-Testing HDF.getObj()
-Bar = 10
-Baz = 20
-
-Testing HDF.objName()
-Should be "Foo": Foo
-Should be "Bar": Bar
-Should be null: null
-
-Testing HDF.objValue()
-Value of Foo.Bar: 10
-Value of root node: null
-
-Testing HDF.objChild()
-First child name: Bar
-
-Testing HDF.objNext()
-Next child name: Baz
-Next child (should be null): null
-
-Testing HDF.copy()
-name should be barneyb: barneyb
-
-Testing HDF.exportDate()
-DatePST.sec = 18
-DatePST.min = 50
-DatePST.24hour = 19
-DatePST.hour = 7
-DatePST.am = 0
-DatePST.mday = 13
-DatePST.mon = 3
-DatePST.year = 2006
-DatePST.2yr = 06
-DatePST.wday = 2
-DatePST.tzoffset = -0800
-DateEST.sec = 18
-DateEST.min = 50
-DateEST.24hour = 22
-DateEST.hour = 10
-DateEST.am = 0
-DateEST.mday = 13
-DateEST.mon = 3
-DateEST.year = 2006
-DateEST.2yr = 06
-DateEST.wday = 2
-DateEST.tzoffset = -0500
-
-Testing escape mode: html
-Config.VarEscapeMode = "html"
-Some.HTML = <script src="some.js">alert('123');</script>
-Default HTML escaping: <?cs var:Some.HTML ?>
-
-----
-Default HTML escaping: &lt;script src=&quot;some.js&quot;&gt;alert(&#39;123&#39;);&lt;/script&gt;
-
-Testing escape mode: js
-Config.VarEscapeMode = "js"
-Some.HTML = <script src="some.js">alert('123');</script>
-Default JS escaping: <?cs var:Some.HTML ?>
-
-----
-Default JS escaping: \x3Cscript src=\x22some.js\x22\x3Ealert(\x27123\x27)\x3B\x3C\x2Fscript\x3E
-
-Testing escape mode: url
-Config.VarEscapeMode = "url"
-Some.HTML = <script src="some.js">alert('123');</script>
-Default URL escaping: <?cs var:Some.HTML ?>
-
-----
-Default URL escaping: %3Cscript+src%3D%22some.js%22%3Ealert(%27123%27)%3B%3C%2Fscript%3E
-
-Testing escape blocks: none
-Config.VarEscapeMode = "none"
-Some.HTML = <script src="some.js">alert('123');</script>
-url escape block:
-<?cs escape: "url"?> <?cs var:Some.HTML ?><?cs /escape ?>
-js escape block:
-<?cs escape: "js"?> <?cs var:Some.HTML ?><?cs /escape ?>
-html escape block:
-<?cs escape: "html"?> <?cs var:Some.HTML ?><?cs /escape ?>
-
-----
-url escape block:
- %3Cscript+src%3D%22some.js%22%3Ealert(%27123%27)%3B%3C%2Fscript%3E
-js escape block:
- \x3Cscript src=\x22some.js\x22\x3Ealert(\x27123\x27)\x3B\x3C\x2Fscript\x3E
-html escape block:
- &lt;script src=&quot;some.js&quot;&gt;alert(&#39;123&#39;);&lt;/script&gt;
-
-Testing HDF.readFile() with callback
-
-CSTestLoader::Load testdata/test1.hdf
-
----- file begin ----
-# Simple HDF file to test that HDF.readFile() works
-Foo.Bar = 10
-Foo.Baz = 20
-
----- file end ----
-
-Foo.Bar = 10
-Foo.Baz = 20
-
-Testing CS.parseFile() with callback
-
-CSTestLoader::Load testdata/test.cs
-
----- file begin ----
-Testing CS parse file...
-
-<?cs set:Foo.Frank = "Beans" ?>
-
-<?cs each:f = Foo ?>
- <?cs var:f ?>
-<?cs /each ?>
-
----- file end ----
-
-Testing CS parse file...
-
-
-
-
- 10
-
- 20
-
- Beans
-
-
diff --git a/java-jni/servlet/CSPage.java b/java-jni/servlet/CSPage.java
deleted file mode 100644
index 27bc6a2..0000000
--- a/java-jni/servlet/CSPage.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/* $Id: CSPage.java,v 1.1 2002/09/20 23:14:10 jeske Exp $
- *
- */
-
-import java.io.*;
-import java.text.*;
-import java.util.*;
-import javax.servlet.*;
-import javax.servlet.http.*;
-
-import java.lang.String.*;
-
-import org.clearsilver.*;
-
-/**
- * The simplest possible servlet.
- *
- */
-
-public class CSPage extends HttpServlet {
- public HDF hdf;
- public CS cs;
- public boolean page_debug = true;
-
- public void doGet(HttpServletRequest request,
- HttpServletResponse response)
- throws IOException, ServletException
- {
-
-
- PrintWriter out = response.getWriter();
- hdf = new HDF();
- cs = new CS(hdf);
-
- // HTTP headers
- Enumeration e = request.getHeaderNames();
- while (e.hasMoreElements()) {
- String headerName = (String)e.nextElement();
- String headerValue = request.getHeader(headerName);
- hdf.setValue("HTTP." + headerName,headerValue);
- }
-
-
- hdf.setValue("HTTP.PATH_INFO",request.getPathInfo());
- hdf.setValue("CGI.QueryString",request.getQueryString());
- hdf.setValue("CGI.RequestMethod",request.getMethod());
-
- // Querystring paramaters
- e = request.getParameterNames();
- while (e.hasMoreElements()) {
- String paramName = (String)e.nextElement();
- String paramValue = request.getParameter(paramName);
- hdf.setValue("Query." + paramName,paramValue);
- }
-
-
- // Cookies
-
- Cookie[] cookies = request.getCookies();
- if (cookies.length > 0) {
- for (int i = 0; i < cookies.length; i++) {
- Cookie cookie = cookies[i];
- hdf.setValue("Cookie." + cookie.getName(),cookie.getValue());
- }
- }
-
- // CGI example
- // check for Actions
-
-
- // then call display method
- this.display();
-
- // run required page template through CS
- // cs.parseFile(a_template_file);
-
- // Page Output
-
-
- /* first do cookies
-
- String cookieName = request.getParameter("cookiename");
- String cookieValue = request.getParameter("cookievalue");
- if (cookieName != null && cookieValue != null) {
- Cookie cookie = new Cookie(cookieName, cookieValue);
- response.addCookie(cookie);
- out.println("<P>");
- out.println(rb.getString("cookies.set") + "<br>");
- out.print(rb.getString("cookies.name") + " " + cookieName +
- "<br>");
- out.print(rb.getString("cookies.value") + " " + cookieValue);
- }
-
- */
-
- response.setContentType("text/html");
- out.print(cs.render());
-
-
- // debug
- if (page_debug) {
- out.print("<HR><PRE>");
- out.print(hdf.dump());
- out.print("</PRE>");
- }
-
- }
-
- public void doPost(HttpServletRequest request,
- HttpServletResponse response) throws IOException, ServletException {
- doGet(request, response);
- }
-
- public void display() {
- hdf.setValue("Foo.Bar","1");
- cs.parseStr("Hello Clearsilver<p><TABLE BORDER=1><TR><TD>Foo.Bar</TD><TD><?cs var:Foo.Bar ?></TD></TR></TABLE>");
- }
-
-
-}
-
-
-
diff --git a/java-jni/servlet/HelloCSServlet.java b/java-jni/servlet/HelloCSServlet.java
deleted file mode 100644
index f00eb76..0000000
--- a/java-jni/servlet/HelloCSServlet.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/* $Id: HelloCSServlet.java,v 1.1 2002/09/20 22:13:08 jeske Exp $
- *
- */
-
-import java.io.*;
-import java.text.*;
-import java.util.*;
-import javax.servlet.*;
-import javax.servlet.http.*;
-
-import org.clearsilver.*;
-
-/**
- * The simplest possible Clearsilver servlet.
- *
- */
-
-public class HelloCSServlet extends HttpServlet {
-
- public void doGet(HttpServletRequest request,
- HttpServletResponse response)
- throws IOException, ServletException
- {
-
-
- PrintWriter out = response.getWriter();
- HDF hdf = new HDF();
-
- hdf.setValue("Foo.Bar","1");
-
- CS cs = new CS(hdf);
- cs.parseStr("Hello Clearsilver<p>Foo.Bar: <?cs var:Foo.Bar ?>");
-
-
-
- response.setContentType("text/html");
- out.print(cs.render());
- }
-}
-
-
-
diff --git a/java-jni/testdata/test.cs b/java-jni/testdata/test.cs
deleted file mode 100644
index f5d9bd5..0000000
--- a/java-jni/testdata/test.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-Testing CS parse file...
-
-<?cs set:Foo.Frank = "Beans" ?>
-
-<?cs each:f = Foo ?>
- <?cs var:f ?>
-<?cs /each ?>
diff --git a/java-jni/testdata/test1.hdf b/java-jni/testdata/test1.hdf
deleted file mode 100644
index eee67b2..0000000
--- a/java-jni/testdata/test1.hdf
+++ /dev/null
@@ -1,3 +0,0 @@
-# Simple HDF file to test that HDF.readFile() works
-Foo.Bar = 10
-Foo.Baz = 20
diff --git a/m4/ac_jni_include_dirs.m4 b/m4/ac_jni_include_dirs.m4
deleted file mode 100644
index 65413a7..0000000
--- a/m4/ac_jni_include_dirs.m4
+++ /dev/null
@@ -1,97 +0,0 @@
-dnl @synopsis AC_JNI_INCLUDE_DIR
-dnl
-dnl AC_JNI_INCLUDE_DIR finds include directories needed
-dnl for compiling programs using the JNI interface.
-dnl
-dnl JNI include directories are usually in the java distribution
-dnl This is deduced from the value of JAVAC. When this macro
-dnl completes, a list of directories is left in the variable
-dnl JNI_INCLUDE_DIRS.
-dnl
-dnl Example usage follows:
-dnl
-dnl AC_JNI_INCLUDE_DIR
-dnl
-dnl for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS
-dnl do
-dnl CPPFLAGS="$CPPFLAGS -I$JNI_INCLUDE_DIR"
-dnl done
-dnl
-dnl If you want to force a specific compiler:
-dnl
-dnl - at the configure.in level, set JAVAC=yourcompiler before calling
-dnl AC_JNI_INCLUDE_DIR
-dnl
-dnl - at the configure level, setenv JAVAC
-dnl
-dnl Note: This macro can work with the autoconf M4 macros for Java programs.
-dnl This particular macro is not part of the original set of macros.
-dnl
-dnl @author Don Anderson <dda@sleepycat.com>
-dnl @version $Id: ac_jni_include_dirs.m4,v 1.3 2004/12/24 01:16:37 guidod Exp $
-dnl
-AC_DEFUN([AC_JNI_INCLUDE_DIR],[
-
-JNI_INCLUDE_DIRS=""
-
-test "x$JAVAC" = x && AC_MSG_ERROR(['$JAVAC' undefined])
-AC_PATH_PROG(_ACJNI_JAVAC, $JAVAC, no)
-test "x$_ACJNI_JAVAC" = xno && AC_MSG_ERROR([$JAVAC could not be found in path])
-
-_ACJNI_FOLLOW_SYMLINKS("$_ACJNI_JAVAC")
-_JTOPDIR=`echo "$_ACJNI_FOLLOWED" | sed -e 's://*:/:g' -e 's:/[[^/]]*$::'`
-case "$host_os" in
- darwin*) _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[[^/]]*$::'`
- _JINC="$_JTOPDIR/Headers";;
- *) _JINC="$_JTOPDIR/include";;
-esac
-if test -f "$_JINC/jni.h"; then
- JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JINC"
-else
- _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[[^/]]*$::'`
- if test -f "$_JTOPDIR/include/jni.h"; then
- JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include"
- else
- AC_MSG_ERROR([cannot find java include files])
- fi
-fi
-
-# get the likely subdirectories for system specific java includes
-case "$host_os" in
-bsdi*) _JNI_INC_SUBDIRS="bsdos";;
-linux*) _JNI_INC_SUBDIRS="linux genunix";;
-osf*) _JNI_INC_SUBDIRS="alpha";;
-solaris*) _JNI_INC_SUBDIRS="solaris";;
-mingw*) _JNI_INC_SUBDIRS="win32";;
-cygwin*) _JNI_INC_SUBDIRS="win32";;
-*) _JNI_INC_SUBDIRS="genunix";;
-esac
-
-# add any subdirectories that are present
-for JINCSUBDIR in $_JNI_INC_SUBDIRS
-do
- if test -d "$_JTOPDIR/include/$JINCSUBDIR"; then
- JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include/$JINCSUBDIR"
- fi
-done
-])
-
-# _ACJNI_FOLLOW_SYMLINKS <path>
-# Follows symbolic links on <path>,
-# finally setting variable _ACJNI_FOLLOWED
-# --------------------
-AC_DEFUN([_ACJNI_FOLLOW_SYMLINKS],[
-# find the include directory relative to the javac executable
-_cur="$1"
-while ls -ld "$_cur" 2>/dev/null | grep " -> " >/dev/null; do
- AC_MSG_CHECKING(symlink for $_cur)
- _slink=`ls -ld "$_cur" | sed 's/.* -> //'`
- case "$_slink" in
- /*) _cur="$_slink";;
- # 'X' avoids triggering unwanted echo options.
- *) _cur=`echo "X$_cur" | sed -e 's/^X//' -e 's:[[^/]]*$::'`"$_slink";;
- esac
- AC_MSG_RESULT($_cur)
-done
-_ACJNI_FOLLOWED="$_cur"
-])# _ACJNI
diff --git a/man/man3/cBroadcast.3 b/man/man3/cBroadcast.3
deleted file mode 100644
index cecc512..0000000
--- a/man/man3/cBroadcast.3
+++ /dev/null
@@ -1,37 +0,0 @@
-.TH cBroadcast 3 "12 July 2007" "ClearSilver" "util/ulocks.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cBroadcast - broadcast signal to all waiting threads.
-.SH SYNOPSIS
-.Ss
-#include <util/ulocks.h>
-.Se
-.Ss
-NEOERR *cBroadcast(pthread_cond_t *cond);
-
-.Se
-
-.SH ARGUMENTS
-cond - condition variable to broadcast on.
-
-.SH DESCRIPTION
-Broadcasts a signal to all threads waiting on condition
-variable <cond>.
-
-MT-Level: Safe.
-
-.SH "RETURN VALUE"
-None.
-
-.SH "SEE ALSO"
-.BR mCreate "(3), "fCreate "(3), "mUnlock "(3), "fUnlock "(3), "cBroadcast "(3), "cSignal "(3), "fFind "(3), "cDestroy "(3), "cCreate "(3), "mDestroy "(3), "cWait "(3), "fLock "(3), "fDestroy "(3), "mLock
diff --git a/man/man3/cCreate.3 b/man/man3/cCreate.3
deleted file mode 100644
index cb3eafe..0000000
--- a/man/man3/cCreate.3
+++ /dev/null
@@ -1,36 +0,0 @@
-.TH cCreate 3 "12 July 2007" "ClearSilver" "util/ulocks.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cCreate - initialize a condition variable.
-.SH SYNOPSIS
-.Ss
-#include <util/ulocks.h>
-.Se
-.Ss
-NEOERR *cCreate(pthread_cond_t *cond);
-
-.Se
-
-.SH ARGUMENTS
-cond - condition variable to initialize.
-
-.SH DESCRIPTION
-Initializes the condition variable <cond>.
-
-MT-Level: Safe for unique <cond>.
-
-.SH "RETURN VALUE"
-None.
-
-.SH "SEE ALSO"
-.BR mCreate "(3), "fCreate "(3), "mUnlock "(3), "fUnlock "(3), "cBroadcast "(3), "cSignal "(3), "fFind "(3), "cDestroy "(3), "cCreate "(3), "mDestroy "(3), "cWait "(3), "fLock "(3), "fDestroy "(3), "mLock
diff --git a/man/man3/cDestroy.3 b/man/man3/cDestroy.3
deleted file mode 100644
index 0c013cf..0000000
--- a/man/man3/cDestroy.3
+++ /dev/null
@@ -1,37 +0,0 @@
-.TH cDestroy 3 "12 July 2007" "ClearSilver" "util/ulocks.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cDestroy - destroy a condition variable.
-.SH SYNOPSIS
-.Ss
-#include <util/ulocks.h>
-.Se
-.Ss
-void cDestroy(pthread_cond_t *cond);
-
-.Se
-
-.SH ARGUMENTS
-cond - condition variable to destroy.
-
-.SH DESCRIPTION
-Destroys the condition variable <cond> that was
-initialized by cCreate().
-
-MT-Level: Safe for unique <cond>.
-
-.SH "RETURN VALUE"
-None.
-
-.SH "SEE ALSO"
-.BR mCreate "(3), "fCreate "(3), "mUnlock "(3), "fUnlock "(3), "cBroadcast "(3), "cSignal "(3), "fFind "(3), "cDestroy "(3), "cCreate "(3), "mDestroy "(3), "cWait "(3), "fLock "(3), "fDestroy "(3), "mLock
diff --git a/man/man3/cSignal.3 b/man/man3/cSignal.3
deleted file mode 100644
index 4e5adb3..0000000
--- a/man/man3/cSignal.3
+++ /dev/null
@@ -1,37 +0,0 @@
-.TH cSignal 3 "12 July 2007" "ClearSilver" "util/ulocks.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cSignal - send signal to one waiting thread.
-.SH SYNOPSIS
-.Ss
-#include <util/ulocks.h>
-.Se
-.Ss
-NEOERR *cSignal(pthread_cond_t *cond);
-
-.Se
-
-.SH ARGUMENTS
-cond - condition variable to send signal on.
-
-.SH DESCRIPTION
-Sends a signal to one thread waiting on condition
-variable <cond>.
-
-MT-Level: Safe.
-
-.SH "RETURN VALUE"
-None.
-
-.SH "SEE ALSO"
-.BR mCreate "(3), "fCreate "(3), "mUnlock "(3), "fUnlock "(3), "cBroadcast "(3), "cSignal "(3), "fFind "(3), "cDestroy "(3), "cCreate "(3), "mDestroy "(3), "cWait "(3), "fLock "(3), "fDestroy "(3), "mLock
diff --git a/man/man3/cWait.3 b/man/man3/cWait.3
deleted file mode 100644
index abd86bf..0000000
--- a/man/man3/cWait.3
+++ /dev/null
@@ -1,39 +0,0 @@
-.TH cWait 3 "12 July 2007" "ClearSilver" "util/ulocks.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cWait - wait a condition variable signal.
-.SH SYNOPSIS
-.Ss
-#include <util/ulocks.h>
-.Se
-.Ss
-NEOERR *cWait(pthread_cond_t *cond, pthread_mutex_t *mutex);
-
-.Se
-
-.SH ARGUMENTS
-cond - condition variable to wait on.
-.br
-mutex - locked mutex to protect <cond>.
-
-.SH DESCRIPTION
-Waits for a signal on condition variable <cond>.
-The mutex <mutex> must be locked by the thread.
-
-MT-Level: Safe.
-
-.SH "RETURN VALUE"
-None.
-
-.SH "SEE ALSO"
-.BR mCreate "(3), "fCreate "(3), "mUnlock "(3), "fUnlock "(3), "cBroadcast "(3), "cSignal "(3), "fFind "(3), "cDestroy "(3), "cCreate "(3), "mDestroy "(3), "cWait "(3), "fLock "(3), "fDestroy "(3), "mLock
diff --git a/man/man3/cgi_cookie_authority.3 b/man/man3/cgi_cookie_authority.3
deleted file mode 100644
index 7eb87a0..0000000
--- a/man/man3/cgi_cookie_authority.3
+++ /dev/null
@@ -1,47 +0,0 @@
-.TH cgi_cookie_authority 3 "12 July 2007" "ClearSilver" "cgi/cgi.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgi_cookie_authority - determine the cookie authority for a
-domain
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgi.h>
-.Se
-.Ss
-char *cgi_cookie_authority (CGI *cgi, const char *host);
-
-.Se
-
-.SH ARGUMENTS
-cgi - a CGI struct
-.br
-host - optional host to match against. If NULL, the function
-.br
-will use the HTTP.Host HDF variable.
-
-.SH DESCRIPTION
-cgi_cookie_authority will walk the CookieAuthority
-portion of the CGI HDF data set, and return the matching
-domain if it exists. The purpose of this is so that you
-set domain specific cookies. For instance, you might
-have
-CookieAuthority.0 = neotonic.com
-In which case, any webserver using a hostname ending in
-neotonic.com will generate a cookie authority of
-neotonic.com.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR cgi_debug_init "(3), "cgi_parse "(3), "cgi_destroy "(3), "cgi_js_escape "(3), "cgi_html_escape_strfunc "(3), "cgi_register_strfuncs "(3), "cgi_output "(3), "parse_rfc2388 "(3), "cgi_url_validate "(3), "open_upload "(3), "cgi_cs_init "(3), "cgi_url_escape_more "(3), "cgi_html_strip_strfunc "(3), "cgi_neo_error "(3), "cgi_redirect "(3), "cgi_filehandle "(3), "cgi_register_parse_cb "(3), "cgi_url_escape "(3), "cgi_init "(3), "cgi_redirect_uri "(3), "cgi_cookie_clear "(3), "cgi_url_unescape "(3), "cgi_vredirect "(3), "cgi_display "(3), "cgi_html_ws_strip "(3), "cgi_error "(3), "cgi_cookie_set "(3), "cgi_text_html_strfunc "(3), "cgi_cookie_authority
diff --git a/man/man3/cgi_cookie_clear.3 b/man/man3/cgi_cookie_clear.3
deleted file mode 100644
index 413d49d..0000000
--- a/man/man3/cgi_cookie_clear.3
+++ /dev/null
@@ -1,48 +0,0 @@
-.TH cgi_cookie_clear 3 "12 July 2007" "ClearSilver" "cgi/cgi.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgi_cookie_clear - clear browser cookie
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgi.h>
-.Se
-.Ss
-NEOERR *cgi_cookie_clear (CGI *cgi, const char *name, const char *domain,
- const char *path);
-
-.Se
-
-.SH ARGUMENTS
-cgi - a CGI struct
-.br
-name - the cookie name to clear
-.br
-domain - the domain to clear, NULL for none
-.br
-path - the cookie's path
-
-.SH DESCRIPTION
-cgi_cookie_clear will send back a Set-Cookie string that
-will attempt to stop a browser from continuing to send
-back a cookie. Note that the cookie has to match in
-name, domain, and path, and the luck of the Irish has to
-be with you for this work all the time, but at the least
-it will make the browser send back a cookie with no
-value, which the ClearSilver cookie parsing code will
-ignore.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR cgi_debug_init "(3), "cgi_parse "(3), "cgi_destroy "(3), "cgi_js_escape "(3), "cgi_html_escape_strfunc "(3), "cgi_register_strfuncs "(3), "cgi_output "(3), "parse_rfc2388 "(3), "cgi_url_validate "(3), "open_upload "(3), "cgi_cs_init "(3), "cgi_url_escape_more "(3), "cgi_html_strip_strfunc "(3), "cgi_neo_error "(3), "cgi_redirect "(3), "cgi_filehandle "(3), "cgi_register_parse_cb "(3), "cgi_url_escape "(3), "cgi_init "(3), "cgi_redirect_uri "(3), "cgi_cookie_clear "(3), "cgi_url_unescape "(3), "cgi_vredirect "(3), "cgi_display "(3), "cgi_html_ws_strip "(3), "cgi_error "(3), "cgi_cookie_set "(3), "cgi_text_html_strfunc "(3), "cgi_cookie_authority
diff --git a/man/man3/cgi_cookie_set.3 b/man/man3/cgi_cookie_set.3
deleted file mode 100644
index beb87ac..0000000
--- a/man/man3/cgi_cookie_set.3
+++ /dev/null
@@ -1,62 +0,0 @@
-.TH cgi_cookie_set 3 "12 July 2007" "ClearSilver" "cgi/cgi.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgi_cookie_set - Set a browser Cookie
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgi.h>
-.Se
-.Ss
-NEOERR *cgi_cookie_set (CGI *cgi, const char *name, const char *value,
- const char *path, const char *domain,
- const char *time_str, int persistent, int secure);
-
-.Se
-
-.SH ARGUMENTS
-cgi - a CGI struct
-.br
-name - the name of the cookie
-.br
-value - the value to set the cookie to.
-.br
-path - optional path for which the cookie is valid. Default
-.br
-is /
-.br
-domain - optional domain for which the cookie is valid. You
-.br
-can use cgi_cookie_authority to determine this
-.br
-domain. Default is none, which is interpreted by
-.br
-the browser as the sending domain only.
-.br
-time_str - expiration time string in the following format
-
-.SH DESCRIPTION
-cgi_cookie_set will issue a Set-Cookie header that
-should cause a browser to return a cookie when required.
-Note this function does no escaping of anything, you
-have to take care of that first.
-
-HH:MM: SS GMT. Only used if
-persistent. Default is one year from time of call.
-persistent - cookie will be stored by the browser between sessions
-secure - cookie will only be sent over secure connections
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR cgi_debug_init "(3), "cgi_parse "(3), "cgi_destroy "(3), "cgi_js_escape "(3), "cgi_html_escape_strfunc "(3), "cgi_register_strfuncs "(3), "cgi_output "(3), "parse_rfc2388 "(3), "cgi_url_validate "(3), "open_upload "(3), "cgi_cs_init "(3), "cgi_url_escape_more "(3), "cgi_html_strip_strfunc "(3), "cgi_neo_error "(3), "cgi_redirect "(3), "cgi_filehandle "(3), "cgi_register_parse_cb "(3), "cgi_url_escape "(3), "cgi_init "(3), "cgi_redirect_uri "(3), "cgi_cookie_clear "(3), "cgi_url_unescape "(3), "cgi_vredirect "(3), "cgi_display "(3), "cgi_html_ws_strip "(3), "cgi_error "(3), "cgi_cookie_set "(3), "cgi_text_html_strfunc "(3), "cgi_cookie_authority
diff --git a/man/man3/cgi_cs_init.3 b/man/man3/cgi_cs_init.3
deleted file mode 100644
index 12fe91d..0000000
--- a/man/man3/cgi_cs_init.3
+++ /dev/null
@@ -1,37 +0,0 @@
-.TH cgi_cs_init 3 "12 July 2007" "ClearSilver" "cgi/cgi.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgi_cs_init - initialize CS parser with the CGI defaults
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgi.h>
-.Se
-.Ss
-NEOERR *cgi_cs_init(CGI *cgi, CSPARSE **cs);
-
-.Se
-
-.SH ARGUMENTS
-cgi - a pointer a CGI struct allocated with cgi_init
-.br
-cs - a pointer to a CS struct pointer
-
-.SH DESCRIPTION
-cgi_cs_init initializes a CS parser with the CGI HDF
-context, and registers the standard CGI filters
-
-.SH "RETURN VALUE"
-cs - the allocated/initialized CS struct
-
-.SH "SEE ALSO"
-.BR cgi_debug_init "(3), "cgi_parse "(3), "cgi_destroy "(3), "cgi_js_escape "(3), "cgi_html_escape_strfunc "(3), "cgi_register_strfuncs "(3), "cgi_output "(3), "parse_rfc2388 "(3), "cgi_url_validate "(3), "open_upload "(3), "cgi_cs_init "(3), "cgi_url_escape_more "(3), "cgi_html_strip_strfunc "(3), "cgi_neo_error "(3), "cgi_redirect "(3), "cgi_filehandle "(3), "cgi_register_parse_cb "(3), "cgi_url_escape "(3), "cgi_init "(3), "cgi_redirect_uri "(3), "cgi_cookie_clear "(3), "cgi_url_unescape "(3), "cgi_vredirect "(3), "cgi_display "(3), "cgi_html_ws_strip "(3), "cgi_error "(3), "cgi_cookie_set "(3), "cgi_text_html_strfunc "(3), "cgi_cookie_authority
diff --git a/man/man3/cgi_debug_init.3 b/man/man3/cgi_debug_init.3
deleted file mode 100644
index 807d072..0000000
--- a/man/man3/cgi_debug_init.3
+++ /dev/null
@@ -1,40 +0,0 @@
-.TH cgi_debug_init 3 "12 July 2007" "ClearSilver" "cgi/cgi.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgi_debug_init - initialize standalone debugging
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgi.h>
-.Se
-.Ss
-void cgi_debug_init (int argc, char **argv);
-
-.Se
-
-.SH ARGUMENTS
-argc/argv - the arguments from main
-
-.SH DESCRIPTION
-cgi_debug_init initializes a CGI program for standalone
-debugging. By running a ClearSilver CGI program with a
-filename on the command line as the first argument, the
-CGI program will load that file of the form K=V as a set
-of HTTP/CGI environment variables. This allows you to
-run the program under a debugger in a reproducible
-environment.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR cgi_debug_init "(3), "cgi_parse "(3), "cgi_destroy "(3), "cgi_js_escape "(3), "cgi_html_escape_strfunc "(3), "cgi_register_strfuncs "(3), "cgi_output "(3), "parse_rfc2388 "(3), "cgi_url_validate "(3), "open_upload "(3), "cgi_cs_init "(3), "cgi_url_escape_more "(3), "cgi_html_strip_strfunc "(3), "cgi_neo_error "(3), "cgi_redirect "(3), "cgi_filehandle "(3), "cgi_register_parse_cb "(3), "cgi_url_escape "(3), "cgi_init "(3), "cgi_redirect_uri "(3), "cgi_cookie_clear "(3), "cgi_url_unescape "(3), "cgi_vredirect "(3), "cgi_display "(3), "cgi_html_ws_strip "(3), "cgi_error "(3), "cgi_cookie_set "(3), "cgi_text_html_strfunc "(3), "cgi_cookie_authority
diff --git a/man/man3/cgi_destroy.3 b/man/man3/cgi_destroy.3
deleted file mode 100644
index bb8ee0f..0000000
--- a/man/man3/cgi_destroy.3
+++ /dev/null
@@ -1,39 +0,0 @@
-.TH cgi_destroy 3 "12 July 2007" "ClearSilver" "cgi/cgi.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgi_destroy - deallocate the data associated with a CGI
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgi.h>
-.Se
-.Ss
-void cgi_destroy (CGI **cgi);
-
-.Se
-
-.SH ARGUMENTS
-cgi - a pointer to a pointer to a CGI struct
-
-.SH DESCRIPTION
-cgi_destroy will destroy all the data associated with a
-CGI, which mostly means the associated HDF and removal
-of any files that were uploaded via multipart/form-data.
-(Note that even in the event of a crash, these files
-will be deleted, as they were unlinked on creation and
-only exist because of the open file pointer)
-
-.SH "RETURN VALUE"
-cgi - NULL on output
-
-.SH "SEE ALSO"
-.BR cgi_debug_init "(3), "cgi_parse "(3), "cgi_destroy "(3), "cgi_js_escape "(3), "cgi_html_escape_strfunc "(3), "cgi_register_strfuncs "(3), "cgi_output "(3), "parse_rfc2388 "(3), "cgi_url_validate "(3), "open_upload "(3), "cgi_cs_init "(3), "cgi_url_escape_more "(3), "cgi_html_strip_strfunc "(3), "cgi_neo_error "(3), "cgi_redirect "(3), "cgi_filehandle "(3), "cgi_register_parse_cb "(3), "cgi_url_escape "(3), "cgi_init "(3), "cgi_redirect_uri "(3), "cgi_cookie_clear "(3), "cgi_url_unescape "(3), "cgi_vredirect "(3), "cgi_display "(3), "cgi_html_ws_strip "(3), "cgi_error "(3), "cgi_cookie_set "(3), "cgi_text_html_strfunc "(3), "cgi_cookie_authority
diff --git a/man/man3/cgi_display.3 b/man/man3/cgi_display.3
deleted file mode 100644
index c70b592..0000000
--- a/man/man3/cgi_display.3
+++ /dev/null
@@ -1,39 +0,0 @@
-.TH cgi_display 3 "12 July 2007" "ClearSilver" "cgi/cgi.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgi_display - render and display the CGI output to the user
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgi.h>
-.Se
-.Ss
-NEOERR *cgi_display (CGI *cgi, const char *cs_file);
-
-.Se
-
-.SH ARGUMENTS
-cgi - a pointer a CGI struct allocated with cgi_init
-.br
-cs_file - a ClearSilver template file
-
-.SH DESCRIPTION
-cgi_display will render the CS template pointed to by
-cs_file using the CGI's HDF data set, and send the
-output to the user. Note that the output is actually
-rendered into memory first.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR cgi_debug_init "(3), "cgi_parse "(3), "cgi_destroy "(3), "cgi_js_escape "(3), "cgi_html_escape_strfunc "(3), "cgi_register_strfuncs "(3), "cgi_output "(3), "parse_rfc2388 "(3), "cgi_url_validate "(3), "open_upload "(3), "cgi_cs_init "(3), "cgi_url_escape_more "(3), "cgi_html_strip_strfunc "(3), "cgi_neo_error "(3), "cgi_redirect "(3), "cgi_filehandle "(3), "cgi_register_parse_cb "(3), "cgi_url_escape "(3), "cgi_init "(3), "cgi_redirect_uri "(3), "cgi_cookie_clear "(3), "cgi_url_unescape "(3), "cgi_vredirect "(3), "cgi_display "(3), "cgi_html_ws_strip "(3), "cgi_error "(3), "cgi_cookie_set "(3), "cgi_text_html_strfunc "(3), "cgi_cookie_authority
diff --git a/man/man3/cgi_error.3 b/man/man3/cgi_error.3
deleted file mode 100644
index 70255d1..0000000
--- a/man/man3/cgi_error.3
+++ /dev/null
@@ -1,40 +0,0 @@
-.TH cgi_error 3 "12 July 2007" "ClearSilver" "cgi/cgi.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgi_error - display an error string to the user
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgi.h>
-.Se
-.Ss
-void cgi_error (CGI *cgi, const char *fmt, ...)
- ATTRIBUTE_PRINTF(2,3);
-
-.Se
-
-.SH ARGUMENTS
-cgi - a pointer to a CGI struct
-.br
-fmt - printf style format string and arguments
-
-.SH DESCRIPTION
-cgi_error will output a 500 error containing the
-specified error message. This function is likely to be
-removed from future versions in favor of a user error
-mechanism.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR cgi_debug_init "(3), "cgi_parse "(3), "cgi_destroy "(3), "cgi_js_escape "(3), "cgi_html_escape_strfunc "(3), "cgi_register_strfuncs "(3), "cgi_output "(3), "parse_rfc2388 "(3), "cgi_url_validate "(3), "open_upload "(3), "cgi_cs_init "(3), "cgi_url_escape_more "(3), "cgi_html_strip_strfunc "(3), "cgi_neo_error "(3), "cgi_redirect "(3), "cgi_filehandle "(3), "cgi_register_parse_cb "(3), "cgi_url_escape "(3), "cgi_init "(3), "cgi_redirect_uri "(3), "cgi_cookie_clear "(3), "cgi_url_unescape "(3), "cgi_vredirect "(3), "cgi_display "(3), "cgi_html_ws_strip "(3), "cgi_error "(3), "cgi_cookie_set "(3), "cgi_text_html_strfunc "(3), "cgi_cookie_authority
diff --git a/man/man3/cgi_filehandle.3 b/man/man3/cgi_filehandle.3
deleted file mode 100644
index fa17b2d..0000000
--- a/man/man3/cgi_filehandle.3
+++ /dev/null
@@ -1,43 +0,0 @@
-.TH cgi_filehandle 3 "12 July 2007" "ClearSilver" "cgi/cgi.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgi_filehandle - return a file pointer to an uploaded file
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgi.h>
-.Se
-.Ss
-FILE *cgi_filehandle (CGI *cgi, const char *form_name);
-
-.Se
-
-.SH ARGUMENTS
-cgi - a pointer to a CGI struct allocated with cgi_init
-.br
-form_name - the form name that the file was uploaded as
-.br
-(not the filename) (if NULL, we're asking for the
-.br
-file handle for the PUT upload)
-
-.SH DESCRIPTION
-cgi_filehandle will return the stdio FILE pointer
-associated with a file that was uploaded using
-multipart/form-data. The FILE pointer is positioned at
-the start of the file when first available.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR cgi_debug_init "(3), "cgi_parse "(3), "cgi_destroy "(3), "cgi_js_escape "(3), "cgi_html_escape_strfunc "(3), "cgi_register_strfuncs "(3), "cgi_output "(3), "parse_rfc2388 "(3), "cgi_url_validate "(3), "open_upload "(3), "cgi_cs_init "(3), "cgi_url_escape_more "(3), "cgi_html_strip_strfunc "(3), "cgi_neo_error "(3), "cgi_redirect "(3), "cgi_filehandle "(3), "cgi_register_parse_cb "(3), "cgi_url_escape "(3), "cgi_init "(3), "cgi_redirect_uri "(3), "cgi_cookie_clear "(3), "cgi_url_unescape "(3), "cgi_vredirect "(3), "cgi_display "(3), "cgi_html_ws_strip "(3), "cgi_error "(3), "cgi_cookie_set "(3), "cgi_text_html_strfunc "(3), "cgi_cookie_authority
diff --git a/man/man3/cgi_init.3 b/man/man3/cgi_init.3
deleted file mode 100644
index f784958..0000000
--- a/man/man3/cgi_init.3
+++ /dev/null
@@ -1,52 +0,0 @@
-.TH cgi_init 3 "12 July 2007" "ClearSilver" "cgi/cgi.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgi_init - Initialize ClearSilver CGI environment
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgi.h>
-.Se
-.Ss
-NEOERR *cgi_init (CGI **cgi, HDF *hdf);
-
-.Se
-
-.SH ARGUMENTS
-cgi - a pointer to a CGI pointer
-.br
-hdf_file - the path to an HDF data set file that will also be
-.br
-loaded into the dataset. This will likely have to
-.br
-a be a full path, as the HDF search paths are not
-.br
-yet set up. Certain things, like
-
-.SH DESCRIPTION
-cgi_init initializes the ClearSilver CGI environment,
-including creating the HDF data set. It will then import
-the standard CGI environment variables into that dataset,
-will parse the QUERY_STRING into the data set, and parse
-the HTTP_COOKIE into the data set. Note that if the
-var xdisplay is in the form data, cgi_init will attempt
-to validate the value and launch the configured debugger
-on the CGI program. These variables have to be
-specified in the hdf_file pointed to by hdf_file. The
-default settings do not allow debugger launching for
-security reasons.
-
-.SH "RETURN VALUE"
-cgi - an allocated CGI struct, including
-
-.SH "SEE ALSO"
-.BR cgi_debug_init "(3), "cgi_parse "(3), "cgi_destroy "(3), "cgi_js_escape "(3), "cgi_html_escape_strfunc "(3), "cgi_register_strfuncs "(3), "cgi_output "(3), "parse_rfc2388 "(3), "cgi_url_validate "(3), "open_upload "(3), "cgi_cs_init "(3), "cgi_url_escape_more "(3), "cgi_html_strip_strfunc "(3), "cgi_neo_error "(3), "cgi_redirect "(3), "cgi_filehandle "(3), "cgi_register_parse_cb "(3), "cgi_url_escape "(3), "cgi_init "(3), "cgi_redirect_uri "(3), "cgi_cookie_clear "(3), "cgi_url_unescape "(3), "cgi_vredirect "(3), "cgi_display "(3), "cgi_html_ws_strip "(3), "cgi_error "(3), "cgi_cookie_set "(3), "cgi_text_html_strfunc "(3), "cgi_cookie_authority
diff --git a/man/man3/cgi_neo_error.3 b/man/man3/cgi_neo_error.3
deleted file mode 100644
index b9bf0ef..0000000
--- a/man/man3/cgi_neo_error.3
+++ /dev/null
@@ -1,39 +0,0 @@
-.TH cgi_neo_error 3 "12 July 2007" "ClearSilver" "cgi/cgi.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgi_neo_error - display a NEOERR call backtrace
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgi.h>
-.Se
-.Ss
-void cgi_neo_error (CGI *cgi, NEOERR *err);
-
-.Se
-
-.SH ARGUMENTS
-cgi - a pointer to a CGI struct
-.br
-err - a NEOERR (see util/neo_err.h for details)
-
-.SH DESCRIPTION
-cgi_neo_error will output a 500 error containing the
-NEOERR call backtrace. This function is likely to be
-removed from future versions in favor of some sort of
-user error mechanism.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR cgi_debug_init "(3), "cgi_parse "(3), "cgi_destroy "(3), "cgi_js_escape "(3), "cgi_html_escape_strfunc "(3), "cgi_register_strfuncs "(3), "cgi_output "(3), "parse_rfc2388 "(3), "cgi_url_validate "(3), "open_upload "(3), "cgi_cs_init "(3), "cgi_url_escape_more "(3), "cgi_html_strip_strfunc "(3), "cgi_neo_error "(3), "cgi_redirect "(3), "cgi_filehandle "(3), "cgi_register_parse_cb "(3), "cgi_url_escape "(3), "cgi_init "(3), "cgi_redirect_uri "(3), "cgi_cookie_clear "(3), "cgi_url_unescape "(3), "cgi_vredirect "(3), "cgi_display "(3), "cgi_html_ws_strip "(3), "cgi_error "(3), "cgi_cookie_set "(3), "cgi_text_html_strfunc "(3), "cgi_cookie_authority
diff --git a/man/man3/cgi_output.3 b/man/man3/cgi_output.3
deleted file mode 100644
index 201af65..0000000
--- a/man/man3/cgi_output.3
+++ /dev/null
@@ -1,38 +0,0 @@
-.TH cgi_output 3 "12 July 2007" "ClearSilver" "cgi/cgi.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgi_output - display the CGI output to the user
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgi.h>
-.Se
-.Ss
-NEOERR *cgi_output (CGI *cgi, STRING *output);
-
-.Se
-
-.SH ARGUMENTS
-cgi - a pointer a CGI struct allocated with cgi_init
-.br
-output - the data to send to output from the CGI
-
-.SH DESCRIPTION
-Normally, this is called by cgi_display, but some
-people wanted it external so they could call it
-directly.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR cgi_debug_init "(3), "cgi_parse "(3), "cgi_destroy "(3), "cgi_js_escape "(3), "cgi_html_escape_strfunc "(3), "cgi_register_strfuncs "(3), "cgi_output "(3), "parse_rfc2388 "(3), "cgi_url_validate "(3), "open_upload "(3), "cgi_cs_init "(3), "cgi_url_escape_more "(3), "cgi_html_strip_strfunc "(3), "cgi_neo_error "(3), "cgi_redirect "(3), "cgi_filehandle "(3), "cgi_register_parse_cb "(3), "cgi_url_escape "(3), "cgi_init "(3), "cgi_redirect_uri "(3), "cgi_cookie_clear "(3), "cgi_url_unescape "(3), "cgi_vredirect "(3), "cgi_display "(3), "cgi_html_ws_strip "(3), "cgi_error "(3), "cgi_cookie_set "(3), "cgi_text_html_strfunc "(3), "cgi_cookie_authority
diff --git a/man/man3/cgi_parse.3 b/man/man3/cgi_parse.3
deleted file mode 100644
index 2e54d50..0000000
--- a/man/man3/cgi_parse.3
+++ /dev/null
@@ -1,51 +0,0 @@
-.TH cgi_parse 3 "12 July 2007" "ClearSilver" "cgi/cgi.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgi_parse - Parse incoming CGI data
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgi.h>
-.Se
-.Ss
-NEOERR *cgi_parse (CGI *cgi);
-
-.Se
-
-.SH ARGUMENTS
-cgi - a pointer to a CGI pointer
-
-.SH DESCRIPTION
-We split cgi_init into two sections, one that parses
- just the basics, and the second is cgi_parse. cgi_parse
- is responsible for parsing the entity body of the HTTP
- request. This payload is typically only sent (expected)
- on POST/PUT requests, but generally this is called on
- all incoming requests. This function walks the list of
- registered parse callbacks (see cgi_register_parse_cb),
- and if none of those matches or handles the request, it
-
-handlers:
- POST w/ application/x-www-form-urlencoded
- POST w/ application/form-data
- PUT w/ any content type
- In general, if there is no Content-Length, then
- cgi_parse ignores the payload and doesn't raise an
- error.
-
-.SH "RETURN VALUE"
-Either data populated into files and cgi->hdf, or whatever
-.br
-other side effects of your own registered callbacks.
-
-.SH "SEE ALSO"
-.BR cgi_debug_init "(3), "cgi_parse "(3), "cgi_destroy "(3), "cgi_js_escape "(3), "cgi_html_escape_strfunc "(3), "cgi_register_strfuncs "(3), "cgi_output "(3), "parse_rfc2388 "(3), "cgi_url_validate "(3), "open_upload "(3), "cgi_cs_init "(3), "cgi_url_escape_more "(3), "cgi_html_strip_strfunc "(3), "cgi_neo_error "(3), "cgi_redirect "(3), "cgi_filehandle "(3), "cgi_register_parse_cb "(3), "cgi_url_escape "(3), "cgi_init "(3), "cgi_redirect_uri "(3), "cgi_cookie_clear "(3), "cgi_url_unescape "(3), "cgi_vredirect "(3), "cgi_display "(3), "cgi_html_ws_strip "(3), "cgi_error "(3), "cgi_cookie_set "(3), "cgi_text_html_strfunc "(3), "cgi_cookie_authority
diff --git a/man/man3/cgi_redirect.3 b/man/man3/cgi_redirect.3
deleted file mode 100644
index d5eff33..0000000
--- a/man/man3/cgi_redirect.3
+++ /dev/null
@@ -1,42 +0,0 @@
-.TH cgi_redirect 3 "12 July 2007" "ClearSilver" "cgi/cgi.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgi_redirect - send an HTTP 302 redirect response
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgi.h>
-.Se
-.Ss
-void cgi_redirect (CGI *cgi, const char *fmt, ...)
- ATTRIBUTE_PRINTF(2,3);
-
-.Se
-
-.SH ARGUMENTS
-cgi - cgi struct
-.br
-fmt - printf style format with args
-
-.SH DESCRIPTION
-cgi_redirect will redirect the user to another page on
-your site. This version takes only the path portion of
-the URL. As with all printf style commands, you should
-not call this with arbitrary input that may contain %
-characters, if you are forwarding something directly,
-use a format like cgi_redirect (cgi, "%s", buf)
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR cgi_debug_init "(3), "cgi_parse "(3), "cgi_destroy "(3), "cgi_js_escape "(3), "cgi_html_escape_strfunc "(3), "cgi_register_strfuncs "(3), "cgi_output "(3), "parse_rfc2388 "(3), "cgi_url_validate "(3), "open_upload "(3), "cgi_cs_init "(3), "cgi_url_escape_more "(3), "cgi_html_strip_strfunc "(3), "cgi_neo_error "(3), "cgi_redirect "(3), "cgi_filehandle "(3), "cgi_register_parse_cb "(3), "cgi_url_escape "(3), "cgi_init "(3), "cgi_redirect_uri "(3), "cgi_cookie_clear "(3), "cgi_url_unescape "(3), "cgi_vredirect "(3), "cgi_display "(3), "cgi_html_ws_strip "(3), "cgi_error "(3), "cgi_cookie_set "(3), "cgi_text_html_strfunc "(3), "cgi_cookie_authority
diff --git a/man/man3/cgi_redirect_uri.3 b/man/man3/cgi_redirect_uri.3
deleted file mode 100644
index 5788794..0000000
--- a/man/man3/cgi_redirect_uri.3
+++ /dev/null
@@ -1,43 +0,0 @@
-.TH cgi_redirect_uri 3 "12 July 2007" "ClearSilver" "cgi/cgi.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgi_redirect_uri - send an HTTP 302 redirect response
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgi.h>
-.Se
-.Ss
-void cgi_redirect_uri (CGI *cgi, const char *fmt, ...)
- ATTRIBUTE_PRINTF(2,3);
-
-.Se
-
-.SH ARGUMENTS
-cgi - cgi struct
-.br
-fmt - printf style format with args
-
-.SH DESCRIPTION
-cgi_redirect_uri will redirect the user to another page on
-your site. This version takes the full URL, including
-protocol/domain/port/path.
-As with all printf style commands, you should
-not call this with arbitrary input that may contain %
-characters, if you are forwarding something directly,
-use a format like cgi_redirect (cgi, "%s", buf)
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR cgi_debug_init "(3), "cgi_parse "(3), "cgi_destroy "(3), "cgi_js_escape "(3), "cgi_html_escape_strfunc "(3), "cgi_register_strfuncs "(3), "cgi_output "(3), "parse_rfc2388 "(3), "cgi_url_validate "(3), "open_upload "(3), "cgi_cs_init "(3), "cgi_url_escape_more "(3), "cgi_html_strip_strfunc "(3), "cgi_neo_error "(3), "cgi_redirect "(3), "cgi_filehandle "(3), "cgi_register_parse_cb "(3), "cgi_url_escape "(3), "cgi_init "(3), "cgi_redirect_uri "(3), "cgi_cookie_clear "(3), "cgi_url_unescape "(3), "cgi_vredirect "(3), "cgi_display "(3), "cgi_html_ws_strip "(3), "cgi_error "(3), "cgi_cookie_set "(3), "cgi_text_html_strfunc "(3), "cgi_cookie_authority
diff --git a/man/man3/cgi_register_parse_cb.3 b/man/man3/cgi_register_parse_cb.3
deleted file mode 100644
index fe3fb45..0000000
--- a/man/man3/cgi_register_parse_cb.3
+++ /dev/null
@@ -1,77 +0,0 @@
-.TH cgi_register_parse_cb 3 "12 July 2007" "ClearSilver" "cgi/cgi.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgi_register_parse_cb - Register a parse callback
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgi.h>
-.Se
-.Ss
-NEOERR *cgi_register_parse_cb(CGI *cgi, const char *method, const char *ctype,
- void *rock, CGI_PARSE_CB parse_cb);
-
-.Se
-
-.SH ARGUMENTS
-cgi - a CGI struct
-.br
-method - the HTTP method you want to handle, or * for all
-.br
-ctype - the HTTP Content-Type you want to handle, or * for all
-.br
-rock - opaque data that we'll pass to your call back
-
-.SH DESCRIPTION
-The ClearSilver CGI Kit has built-in functionality to handle
-the following methods:
-GET -> doesn't have any data except query string, which
-is processed for all methods
-POST w/ application/x-www-form-urlencoded
-POST w/ multipart/form-data
-processed as RFC2388 data into files and HDF (see
-cgi_filehandle())
-PUT (any type)
-The entire data chunk is stored as a file, with meta
-data in HDF (similar to single files in RFC2388).
-The data is accessible via cgi_filehandle with NULL
-for name.
-To handle other methods/content types, you have to
-register your own parse function. This isn't necessary
-if you aren't expecting any data, and technically HTTP
-only allows data on PUT/POST requests (and presumably
-user defined methods). In particular, if you want to
-implement XML-RPC or SOAP, you'll have to register a
-callback here to grab the XML data chunk. Usually
-you'll want to register POST w/ application/xml or POST
-w/ text/xml (you either need to register both or
-register POST w/ * and check the ctype yourself,
-remember to nerr_raise(CGIParseNotHandled) if you aren't
-handling the POST).
-In general, your callback should:
-Find out how much data is available:
-l = hdf_get_value (cgi->hdf, "CGI.ContentLength", NULL);
-len = atoi(l);
-And read/handle all of the data using cgiwrap_read.
-See the builtin handlers for how this is done. Note
-that cgiwrap_read is not guarunteed to return all of
-the data you request (just like fread(3)) since it
-might be reading of a socket. Sorry.
-You should be careful when reading the data to watch
-for short reads (ie, end of file) and cases where the
-client sends you data ad infinitum.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR cgi_debug_init "(3), "cgi_parse "(3), "cgi_destroy "(3), "cgi_js_escape "(3), "cgi_html_escape_strfunc "(3), "cgi_register_strfuncs "(3), "cgi_output "(3), "parse_rfc2388 "(3), "cgi_url_validate "(3), "open_upload "(3), "cgi_cs_init "(3), "cgi_url_escape_more "(3), "cgi_html_strip_strfunc "(3), "cgi_neo_error "(3), "cgi_redirect "(3), "cgi_filehandle "(3), "cgi_register_parse_cb "(3), "cgi_url_escape "(3), "cgi_init "(3), "cgi_redirect_uri "(3), "cgi_cookie_clear "(3), "cgi_url_unescape "(3), "cgi_vredirect "(3), "cgi_display "(3), "cgi_html_ws_strip "(3), "cgi_error "(3), "cgi_cookie_set "(3), "cgi_text_html_strfunc "(3), "cgi_cookie_authority
diff --git a/man/man3/cgi_url_escape.3 b/man/man3/cgi_url_escape.3
deleted file mode 100644
index 28a122a..0000000
--- a/man/man3/cgi_url_escape.3
+++ /dev/null
@@ -1,37 +0,0 @@
-.TH cgi_url_escape 3 "12 July 2007" "ClearSilver" "cgi/cgi.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgi_url_escape - url escape a string
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgi.h>
-.Se
-.Ss
-NEOERR *cgi_url_escape (const char *buf, char **esc);
-
-.Se
-
-.SH ARGUMENTS
-buf - a 0 terminated string
-
-.SH DESCRIPTION
-cgi_url_escape will do URL escaping on the passed in
-string, and return a newly allocated string that is escaped.
-Characters which are escaped include control characters,
-%, ?, +, space, =, &, /, and "
-
-.SH "RETURN VALUE"
-esc - a newly allocated string
-
-.SH "SEE ALSO"
-.BR cgi_debug_init "(3), "cgi_parse "(3), "cgi_destroy "(3), "cgi_js_escape "(3), "cgi_html_escape_strfunc "(3), "cgi_register_strfuncs "(3), "cgi_output "(3), "parse_rfc2388 "(3), "cgi_url_validate "(3), "open_upload "(3), "cgi_cs_init "(3), "cgi_url_escape_more "(3), "cgi_html_strip_strfunc "(3), "cgi_neo_error "(3), "cgi_redirect "(3), "cgi_filehandle "(3), "cgi_register_parse_cb "(3), "cgi_url_escape "(3), "cgi_init "(3), "cgi_redirect_uri "(3), "cgi_cookie_clear "(3), "cgi_url_unescape "(3), "cgi_vredirect "(3), "cgi_display "(3), "cgi_html_ws_strip "(3), "cgi_error "(3), "cgi_cookie_set "(3), "cgi_text_html_strfunc "(3), "cgi_cookie_authority
diff --git a/man/man3/cgi_url_escape_more.3 b/man/man3/cgi_url_escape_more.3
deleted file mode 100644
index 20d0ce9..0000000
--- a/man/man3/cgi_url_escape_more.3
+++ /dev/null
@@ -1,40 +0,0 @@
-.TH cgi_url_escape_more 3 "12 July 2007" "ClearSilver" "cgi/cgi.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgi_url_escape_more - url escape a string
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgi.h>
-.Se
-.Ss
-NEOERR *cgi_url_escape_more (const char *buf, char **esc, const char *other);
-
-.Se
-
-.SH ARGUMENTS
-buf - a 0 terminated string
-.br
-other - a 0 terminated string of characters to escape
-
-.SH DESCRIPTION
-cgi_url_escape_more will do URL escaping on the passed in
-string, and return a newly allocated string that is escaped.
-Characters which are escaped include control characters,
-%, ?, +, space, =, &, /, and " and any characters in
-other
-
-.SH "RETURN VALUE"
-esc - a newly allocated string
-
-.SH "SEE ALSO"
-.BR cgi_debug_init "(3), "cgi_parse "(3), "cgi_destroy "(3), "cgi_js_escape "(3), "cgi_html_escape_strfunc "(3), "cgi_register_strfuncs "(3), "cgi_output "(3), "parse_rfc2388 "(3), "cgi_url_validate "(3), "open_upload "(3), "cgi_cs_init "(3), "cgi_url_escape_more "(3), "cgi_html_strip_strfunc "(3), "cgi_neo_error "(3), "cgi_redirect "(3), "cgi_filehandle "(3), "cgi_register_parse_cb "(3), "cgi_url_escape "(3), "cgi_init "(3), "cgi_redirect_uri "(3), "cgi_cookie_clear "(3), "cgi_url_unescape "(3), "cgi_vredirect "(3), "cgi_display "(3), "cgi_html_ws_strip "(3), "cgi_error "(3), "cgi_cookie_set "(3), "cgi_text_html_strfunc "(3), "cgi_cookie_authority
diff --git a/man/man3/cgi_url_unescape.3 b/man/man3/cgi_url_unescape.3
deleted file mode 100644
index 9033b1b..0000000
--- a/man/man3/cgi_url_unescape.3
+++ /dev/null
@@ -1,34 +0,0 @@
-.TH cgi_url_unescape 3 "12 July 2007" "ClearSilver" "cgi/cgi.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgi_url_unescape - unescape an url encoded string
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgi.h>
-.Se
-.Ss
-char *cgi_url_unescape (char *buf);
-
-.Se
-
-.SH ARGUMENTS
-buf - a 0 terminated string
-
-.SH DESCRIPTION
-cgi_url_unescape will do URL unescaping on the passed in
-string. This function modifies the string in place
-This function will decode any %XX character, and will
-decode + as space
-
-.SH "SEE ALSO"
-.BR cgi_debug_init "(3), "cgi_parse "(3), "cgi_destroy "(3), "cgi_js_escape "(3), "cgi_html_escape_strfunc "(3), "cgi_register_strfuncs "(3), "cgi_output "(3), "parse_rfc2388 "(3), "cgi_url_validate "(3), "open_upload "(3), "cgi_cs_init "(3), "cgi_url_escape_more "(3), "cgi_html_strip_strfunc "(3), "cgi_neo_error "(3), "cgi_redirect "(3), "cgi_filehandle "(3), "cgi_register_parse_cb "(3), "cgi_url_escape "(3), "cgi_init "(3), "cgi_redirect_uri "(3), "cgi_cookie_clear "(3), "cgi_url_unescape "(3), "cgi_vredirect "(3), "cgi_display "(3), "cgi_html_ws_strip "(3), "cgi_error "(3), "cgi_cookie_set "(3), "cgi_text_html_strfunc "(3), "cgi_cookie_authority
diff --git a/man/man3/cgi_url_validate.3 b/man/man3/cgi_url_validate.3
deleted file mode 100644
index f690478..0000000
--- a/man/man3/cgi_url_validate.3
+++ /dev/null
@@ -1,39 +0,0 @@
-.TH cgi_url_validate 3 "12 July 2007" "ClearSilver" "cgi/cgi.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgi_url_validate - validate that url is of an allowed format
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgi.h>
-.Se
-.Ss
-NEOERR *cgi_url_validate (const char *buf, char **esc);
-
-.Se
-
-.SH ARGUMENTS
-buf - a 0 terminated string
-
-.SH DESCRIPTION
-cgi_url_validate will check that a URL starts with
-one of the accepted safe schemes.
-If not, it returns "#" as a safe substitute.
-Currently accepted schemes are http, https, ftp and mailto.
-It then html escapes the entire URL so that it is safe to
-insert in an href attribute.
-
-.SH "RETURN VALUE"
-esc - a newly allocated string
-
-.SH "SEE ALSO"
-.BR cgi_debug_init "(3), "cgi_parse "(3), "cgi_destroy "(3), "cgi_js_escape "(3), "cgi_html_escape_strfunc "(3), "cgi_register_strfuncs "(3), "cgi_output "(3), "parse_rfc2388 "(3), "cgi_url_validate "(3), "open_upload "(3), "cgi_cs_init "(3), "cgi_url_escape_more "(3), "cgi_html_strip_strfunc "(3), "cgi_neo_error "(3), "cgi_redirect "(3), "cgi_filehandle "(3), "cgi_register_parse_cb "(3), "cgi_url_escape "(3), "cgi_init "(3), "cgi_redirect_uri "(3), "cgi_cookie_clear "(3), "cgi_url_unescape "(3), "cgi_vredirect "(3), "cgi_display "(3), "cgi_html_ws_strip "(3), "cgi_error "(3), "cgi_cookie_set "(3), "cgi_text_html_strfunc "(3), "cgi_cookie_authority
diff --git a/man/man3/cgi_vredirect.3 b/man/man3/cgi_vredirect.3
deleted file mode 100644
index 9eecb45..0000000
--- a/man/man3/cgi_vredirect.3
+++ /dev/null
@@ -1,41 +0,0 @@
-.TH cgi_vredirect 3 "12 July 2007" "ClearSilver" "cgi/cgi.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgi_vredirect - send an HTTP 302 redirect response
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgi.h>
-.Se
-.Ss
-void cgi_vredirect (CGI *cgi, int uri, const char *fmt, va_list ap);
-
-.Se
-
-.SH ARGUMENTS
-cgi - cgi struct
-.br
-uri - whether the URL is full (1) or path only (0)
-.br
-fmt - printf format string
-.br
-ap - stdarg va_list
-
-.SH DESCRIPTION
-cgi_vredirect is mostly used internally, but can be used
-if you need a varargs version of the function.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR cgi_debug_init "(3), "cgi_parse "(3), "cgi_destroy "(3), "cgi_js_escape "(3), "cgi_html_escape_strfunc "(3), "cgi_register_strfuncs "(3), "cgi_output "(3), "parse_rfc2388 "(3), "cgi_url_validate "(3), "open_upload "(3), "cgi_cs_init "(3), "cgi_url_escape_more "(3), "cgi_html_strip_strfunc "(3), "cgi_neo_error "(3), "cgi_redirect "(3), "cgi_filehandle "(3), "cgi_register_parse_cb "(3), "cgi_url_escape "(3), "cgi_init "(3), "cgi_redirect_uri "(3), "cgi_cookie_clear "(3), "cgi_url_unescape "(3), "cgi_vredirect "(3), "cgi_display "(3), "cgi_html_ws_strip "(3), "cgi_error "(3), "cgi_cookie_set "(3), "cgi_text_html_strfunc "(3), "cgi_cookie_authority
diff --git a/man/man3/cgiwrap_getenv.3 b/man/man3/cgiwrap_getenv.3
deleted file mode 100644
index ca60d72..0000000
--- a/man/man3/cgiwrap_getenv.3
+++ /dev/null
@@ -1,43 +0,0 @@
-.TH cgiwrap_getenv 3 "12 July 2007" "ClearSilver" "cgi/cgiwrap.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgiwrap_getenv - the wrapper for getenv
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgiwrap.h>
-.Se
-.Ss
-NEOERR *cgiwrap_getenv (const char *k, char **v);
-
-.Se
-
-.SH ARGUMENTS
-k - the environment variable to lookup
-
-.SH DESCRIPTION
-cgiwrap_getenv wraps the getenv function for access to
-environment variables, which are used to pass data to
-CGI scripts. This version differs from the system
-getenv in that it makes a copy of the value it returns,
-which gets around problems when wrapping this routine in
-garbage collected/reference counted languages by
-moving the ownership of the data to the calling
-function.
-
-.SH "RETURN VALUE"
-v - a newly allocated copy of the value of that variable, or
-.br
-NULL if not found.
-
-.SH "SEE ALSO"
-.BR cgiwrap_iterenv "(3), "cgiwrap_putenv "(3), "cgiwrap_init_emu "(3), "cgiwrap_writef "(3), "cgiwrap_init_std "(3), "cgiwrap_writevf "(3), "cgiwrap_read "(3), "cgiwrap_write "(3), "cgiwrap_getenv
diff --git a/man/man3/cgiwrap_init_emu.3 b/man/man3/cgiwrap_init_emu.3
deleted file mode 100644
index e0a3835..0000000
--- a/man/man3/cgiwrap_init_emu.3
+++ /dev/null
@@ -1,56 +0,0 @@
-.TH cgiwrap_init_emu 3 "12 July 2007" "ClearSilver" "cgi/cgiwrap.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgiwrap_init_emu - initialize cgiwrap for emulated use
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgiwrap.h>
-.Se
-.Ss
-void cgiwrap_init_emu (void *data, READ_FUNC read_cb,
- WRITEF_FUNC writef_cb, WRITE_FUNC write_cb, GETENV_FUNC getenv_cb,
- PUTENV_FUNC putenv_cb, ITERENV_FUNC iterenv_cb);
-
-.Se
-
-.SH ARGUMENTS
-data - user data to be passed to the specified callbacks
-.br
-read_cb - a cb to replace fread(stdin)
-.br
-writef_cb - a cb to repalce fprintf(stdout)
-.br
-write_cb - a cb to replace fwrite(stdout)
-.br
-getenv_cb - a cb to replace getenv
-.br
-putenv_cb - a cb to replace putenv
-.br
-iterenv_cb - a cb to replace the default environment iteration
-.br
-function (which just wraps walking the envp array)
-
-.SH DESCRIPTION
-cgiwrap_init_emu sets up the cgiwrap subsystem for use
-in an emulated environment where you are providing
-routines to use in place of the standard routines, ie
-when used to interface with a server or scripting
-language.
-See cgi/cgiwrap.h for the exact definitions of the
-callback functions.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR cgiwrap_iterenv "(3), "cgiwrap_putenv "(3), "cgiwrap_init_emu "(3), "cgiwrap_writef "(3), "cgiwrap_init_std "(3), "cgiwrap_writevf "(3), "cgiwrap_read "(3), "cgiwrap_write "(3), "cgiwrap_getenv
diff --git a/man/man3/cgiwrap_init_std.3 b/man/man3/cgiwrap_init_std.3
deleted file mode 100644
index 2ab3f9d..0000000
--- a/man/man3/cgiwrap_init_std.3
+++ /dev/null
@@ -1,37 +0,0 @@
-.TH cgiwrap_init_std 3 "12 July 2007" "ClearSilver" "cgi/cgiwrap.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgiwrap_init_std - Initialize cgiwrap with default functions
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgiwrap.h>
-.Se
-.Ss
-void cgiwrap_init_std (int argc, char **argv, char **envp);
-
-.Se
-
-.SH ARGUMENTS
-the arguments to main, namely argc/argv/envp
-
-.SH DESCRIPTION
-cgiwrap_init_std will initialize the cgiwrap subsystem
-to use the default CGI functions, ie
-getenv/putenv/stdio. In reality, all this is doing is
-setting up the data for the cgiwrap_iterenv() function.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR cgiwrap_iterenv "(3), "cgiwrap_putenv "(3), "cgiwrap_init_emu "(3), "cgiwrap_writef "(3), "cgiwrap_init_std "(3), "cgiwrap_writevf "(3), "cgiwrap_read "(3), "cgiwrap_write "(3), "cgiwrap_getenv
diff --git a/man/man3/cgiwrap_iterenv.3 b/man/man3/cgiwrap_iterenv.3
deleted file mode 100644
index 2b51601..0000000
--- a/man/man3/cgiwrap_iterenv.3
+++ /dev/null
@@ -1,40 +0,0 @@
-.TH cgiwrap_iterenv 3 "12 July 2007" "ClearSilver" "cgi/cgiwrap.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgiwrap_iterenv - iterater for env vars
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgiwrap.h>
-.Se
-.Ss
-NEOERR *cgiwrap_iterenv (int n, char **k, char **v);
-
-.Se
-
-.SH ARGUMENTS
-n - variable to return. This should start at 0 and increment
-.br
-until you receive a NULL return value.
-
-.SH DESCRIPTION
-cgiwrap_iterenv allows a program to iterate over all the
-environment variables. This is probably mostly used by
-the default debug output.
-
-.SH "RETURN VALUE"
-k - a malloc'd copy of the variable name
-.br
-v - a malloc'd copy of the variable value
-
-.SH "SEE ALSO"
-.BR cgiwrap_iterenv "(3), "cgiwrap_putenv "(3), "cgiwrap_init_emu "(3), "cgiwrap_writef "(3), "cgiwrap_init_std "(3), "cgiwrap_writevf "(3), "cgiwrap_read "(3), "cgiwrap_write "(3), "cgiwrap_getenv
diff --git a/man/man3/cgiwrap_putenv.3 b/man/man3/cgiwrap_putenv.3
deleted file mode 100644
index 45ee24c..0000000
--- a/man/man3/cgiwrap_putenv.3
+++ /dev/null
@@ -1,42 +0,0 @@
-.TH cgiwrap_putenv 3 "12 July 2007" "ClearSilver" "cgi/cgiwrap.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgiwrap_putenv - wrap the putenv call
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgiwrap.h>
-.Se
-.Ss
-NEOERR *cgiwrap_putenv (const char *k, const char *v);
-
-.Se
-
-.SH ARGUMENTS
-k - the env var name
-.br
-v - the new value for env var k
-
-.SH DESCRIPTION
-cgiwrap_putenv wraps the putenv call. This is mostly
-used by the cgi_debug_init function to create an
-artificial environment. This version differs from the
-system version by having separate arguments for the
-variable name and value, which makes life easier for the
-caller (usually), and keeps most wrapping callbacks from
-having to implement a parser to separate them.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR cgiwrap_iterenv "(3), "cgiwrap_putenv "(3), "cgiwrap_init_emu "(3), "cgiwrap_writef "(3), "cgiwrap_init_std "(3), "cgiwrap_writevf "(3), "cgiwrap_read "(3), "cgiwrap_write "(3), "cgiwrap_getenv
diff --git a/man/man3/cgiwrap_read.3 b/man/man3/cgiwrap_read.3
deleted file mode 100644
index f60dd5e..0000000
--- a/man/man3/cgiwrap_read.3
+++ /dev/null
@@ -1,38 +0,0 @@
-.TH cgiwrap_read 3 "12 July 2007" "ClearSilver" "cgi/cgiwrap.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgiwrap_read - cgiwrap input function
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgiwrap.h>
-.Se
-.Ss
-void cgiwrap_read (char *buf, int buf_len, int *read_len);
-
-.Se
-
-.SH ARGUMENTS
-buf - a pre-allocated buffer to read the data into
-.br
-buf_len - the size of the pre-allocated buffer
-
-.SH DESCRIPTION
-cgiwrap_read is used to read incoming data from the
-client, usually from a POST or PUT HTTP request. It
-wraps the part of fread(stdin).
-
-.SH "RETURN VALUE"
-read_len - the number of bytes read into buf
-
-.SH "SEE ALSO"
-.BR cgiwrap_iterenv "(3), "cgiwrap_putenv "(3), "cgiwrap_init_emu "(3), "cgiwrap_writef "(3), "cgiwrap_init_std "(3), "cgiwrap_writevf "(3), "cgiwrap_read "(3), "cgiwrap_write "(3), "cgiwrap_getenv
diff --git a/man/man3/cgiwrap_write.3 b/man/man3/cgiwrap_write.3
deleted file mode 100644
index 5794a0c..0000000
--- a/man/man3/cgiwrap_write.3
+++ /dev/null
@@ -1,37 +0,0 @@
-.TH cgiwrap_write 3 "12 July 2007" "ClearSilver" "cgi/cgiwrap.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgiwrap_write - wrapper for the fwrite(stdout)
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgiwrap.h>
-.Se
-.Ss
-NEOERR *cgiwrap_write (const char *buf, int buf_len);
-
-.Se
-
-.SH ARGUMENTS
-buf - a character buffer
-.br
-buf_len - the length of the buffer in buf
-
-.SH DESCRIPTION
-cgiwrap_write is the block data output function for
-cgiwrap that replaces fwrite(stdout) in regular CGIs
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR cgiwrap_iterenv "(3), "cgiwrap_putenv "(3), "cgiwrap_init_emu "(3), "cgiwrap_writef "(3), "cgiwrap_init_std "(3), "cgiwrap_writevf "(3), "cgiwrap_read "(3), "cgiwrap_write "(3), "cgiwrap_getenv
diff --git a/man/man3/cgiwrap_writef.3 b/man/man3/cgiwrap_writef.3
deleted file mode 100644
index 66aaab2..0000000
--- a/man/man3/cgiwrap_writef.3
+++ /dev/null
@@ -1,36 +0,0 @@
-.TH cgiwrap_writef 3 "12 July 2007" "ClearSilver" "cgi/cgiwrap.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgiwrap_writef - a wrapper for printf
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgiwrap.h>
-.Se
-.Ss
-NEOERR *cgiwrap_writef (const char *fmt, ...)
- ATTRIBUTE_PRINTF(1,2);
-
-.Se
-
-.SH ARGUMENTS
-fmt - standard printf fmt string and args
-
-.SH DESCRIPTION
-cgiwrap_writef is the formatted output command that
-replaces printf or fprintf(stdout) in a standard CGI
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR cgiwrap_iterenv "(3), "cgiwrap_putenv "(3), "cgiwrap_init_emu "(3), "cgiwrap_writef "(3), "cgiwrap_init_std "(3), "cgiwrap_writevf "(3), "cgiwrap_read "(3), "cgiwrap_write "(3), "cgiwrap_getenv
diff --git a/man/man3/cgiwrap_writevf.3 b/man/man3/cgiwrap_writevf.3
deleted file mode 100644
index 767d4f1..0000000
--- a/man/man3/cgiwrap_writevf.3
+++ /dev/null
@@ -1,39 +0,0 @@
-.TH cgiwrap_writevf 3 "12 July 2007" "ClearSilver" "cgi/cgiwrap.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cgiwrap_writevf - a wrapper for vprintf
-.SH SYNOPSIS
-.Ss
-#include <cgi/cgiwrap.h>
-.Se
-.Ss
-NEOERR *cgiwrap_writevf (const char *fmt, va_list ap);
-
-.Se
-
-.SH ARGUMENTS
-fmt - standard printf fmt string
-.br
-ap - stdarg argument pointer
-
-.SH DESCRIPTION
-cgiwrap_writevf is the formatted output command that
-replaces vprintf or fvprintf(stdout) in a standard CGI
-It is also used by cgiwrap_writef (the actual wrapped
-function is a v type function)
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR cgiwrap_iterenv "(3), "cgiwrap_putenv "(3), "cgiwrap_init_emu "(3), "cgiwrap_writef "(3), "cgiwrap_init_std "(3), "cgiwrap_writevf "(3), "cgiwrap_read "(3), "cgiwrap_write "(3), "cgiwrap_getenv
diff --git a/man/man3/cs_destroy.3 b/man/man3/cs_destroy.3
deleted file mode 100644
index 0e9bfdf..0000000
--- a/man/man3/cs_destroy.3
+++ /dev/null
@@ -1,41 +0,0 @@
-.TH cs_destroy 3 "12 July 2007" "ClearSilver" "cs/cs.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cs_destroy - clean up and dealloc a parse tree
-.SH SYNOPSIS
-.Ss
-#include <cs/cs.h>
-.Se
-.Ss
-void cs_destroy (CSPARSE **parse);
-
-.Se
-
-.SH ARGUMENTS
-parse - a pointer to a parse structure.
-
-.SH DESCRIPTION
-cs_destroy will clean up all the memory associated with
-a CSPARSE structure, including strings passed to
-cs_parse_string. This does not clean up any memory
-allocated by your own CSOUTFUNC or the HDF data
-structure passed to cs_init. It is safe to call this
-with a NULL pointer, and it will leave parse NULL as
-well (ie, it can be called more than once on the same
-var)
-
-.SH "RETURN VALUE"
-parse - will be NULL
-
-.SH "SEE ALSO"
-.BR cs_dump "(3), "cs_destroy "(3), "cs_render "(3), "cs_register_esc_strfunc "(3), "cs_arg_parsev "(3), "cs_register_fileload "(3), "cs_init "(3), "cs_register_strfunc "(3), "cs_arg_parse "(3), "cs_parse_string "(3), "cs_parse_file "(3), "= "(3), "cs_register_function
diff --git a/man/man3/cs_dump.3 b/man/man3/cs_dump.3
deleted file mode 100644
index ed0556e..0000000
--- a/man/man3/cs_dump.3
+++ /dev/null
@@ -1,41 +0,0 @@
-.TH cs_dump 3 "12 July 2007" "ClearSilver" "cs/cs.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cs_dump - dump the cs parse tree
-.SH SYNOPSIS
-.Ss
-#include <cs/cs.h>
-.Se
-.Ss
-NEOERR *cs_dump (CSPARSE *parse, void *ctx, CSOUTFUNC cb);
-
-.Se
-
-.SH ARGUMENTS
-parse - the CSPARSE structure created with cs_init
-.br
-ctx - user data to be passed to the CSOUTFUNC
-.br
-cb - a CSOUTFUNC callback
-
-.SH DESCRIPTION
-cs_dump will dump the CS parse tree in the parse struct.
-This can be useful for debugging your templates.
-This function also uses the CSOUTFUNC callback to
-display the parse tree.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR cs_dump "(3), "cs_destroy "(3), "cs_render "(3), "cs_register_esc_strfunc "(3), "cs_arg_parsev "(3), "cs_register_fileload "(3), "cs_init "(3), "cs_register_strfunc "(3), "cs_arg_parse "(3), "cs_parse_string "(3), "cs_parse_file "(3), "= "(3), "cs_register_function
diff --git a/man/man3/cs_init.3 b/man/man3/cs_init.3
deleted file mode 100644
index 8e4f19b..0000000
--- a/man/man3/cs_init.3
+++ /dev/null
@@ -1,48 +0,0 @@
-.TH cs_init 3 "12 July 2007" "ClearSilver" "cs/cs.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cs_init - create and initialize a CS context
-.SH SYNOPSIS
-.Ss
-#include <cs/cs.h>
-.Se
-.Ss
-NEOERR *cs_init (CSPARSE **parse, HDF *hdf);
-
-.Se
-
-.SH ARGUMENTS
-parse - a pointer to a pointer to a CSPARSE structure that
-.br
-will be created
-.br
-hdf - the HDF dataset to be used during parsing and rendering
-
-.SH DESCRIPTION
-cs_init will create a CSPARSE structure and initialize
-it. This structure maintains the state and information
-necessary for parsing and rendering a CS template.
-
-MT-Level: cs routines perform no locking, and neither do hdf
-routines. They should be safe in an MT environment as long
-as they are confined to a single thread.
-
-.SH "RETURN VALUE"
-parse will contain a pointer to the allocated CSPARSE
-.br
-structure. This structure will be deallocated with
-.br
-cs_destroy()
-
-.SH "SEE ALSO"
-.BR cs_dump "(3), "cs_destroy "(3), "cs_render "(3), "cs_register_esc_strfunc "(3), "cs_arg_parsev "(3), "cs_register_fileload "(3), "cs_init "(3), "cs_register_strfunc "(3), "cs_arg_parse "(3), "cs_parse_string "(3), "cs_parse_file "(3), "= "(3), "cs_register_function
diff --git a/man/man3/cs_parse_file.3 b/man/man3/cs_parse_file.3
deleted file mode 100644
index 4592fd6..0000000
--- a/man/man3/cs_parse_file.3
+++ /dev/null
@@ -1,41 +0,0 @@
-.TH cs_parse_file 3 "12 July 2007" "ClearSilver" "cs/cs.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cs_parse_file - parse a CS template file
-.SH SYNOPSIS
-.Ss
-#include <cs/cs.h>
-.Se
-.Ss
-NEOERR *cs_parse_file (CSPARSE *parse, const char *path);
-
-.Se
-
-.SH ARGUMENTS
-parse - a CSPARSE structure created with cs_init
-.br
-path - the path to the file to parse
-
-.SH DESCRIPTION
-cs_parse_file will parse the CS template located at
-path. It will use hdf_search_path() if path does not
-begin with a '/'. The parsed CS template will be
-appended to the current parse tree stored in the CSPARSE
-structure. The entire file is loaded into memory and
-parsed in place.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR cs_dump "(3), "cs_destroy "(3), "cs_render "(3), "cs_register_esc_strfunc "(3), "cs_arg_parsev "(3), "cs_register_fileload "(3), "cs_init "(3), "cs_register_strfunc "(3), "cs_arg_parse "(3), "cs_parse_string "(3), "cs_parse_file "(3), "= "(3), "cs_register_function
diff --git a/man/man3/cs_parse_string.3 b/man/man3/cs_parse_string.3
deleted file mode 100644
index 1fdec28..0000000
--- a/man/man3/cs_parse_string.3
+++ /dev/null
@@ -1,48 +0,0 @@
-.TH cs_parse_string 3 "12 July 2007" "ClearSilver" "cs/cs.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cs_parse_string - parse a CS template string
-.SH SYNOPSIS
-.Ss
-#include <cs/cs.h>
-.Se
-.Ss
-NEOERR *cs_parse_string (CSPARSE *parse, char *buf, size_t blen);
-
-.Se
-
-.SH ARGUMENTS
-parse - a CSPARSE structure created with cs_init
-.br
-buf - the string to parse. Embedded NULLs are not currently
-.br
-supported
-.br
-blen - the length of the string
-
-.SH DESCRIPTION
-cs_parse_string parses a string. The string is
-modified, and internal references are kept by the parse
-tree. For this reason, ownership of the string is
-transfered to the CS system, and the string will be
-free'd when cs_destroy() is called.
-The parse information will be appended to the current
-parse tree. During parse, the only HDF variables which
-are evaluated are those used in evar or include
-statements.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR cs_dump "(3), "cs_destroy "(3), "cs_render "(3), "cs_register_esc_strfunc "(3), "cs_arg_parsev "(3), "cs_register_fileload "(3), "cs_init "(3), "cs_register_strfunc "(3), "cs_arg_parse "(3), "cs_parse_string "(3), "cs_parse_file "(3), "= "(3), "cs_register_function
diff --git a/man/man3/cs_register_esc_strfunc.3 b/man/man3/cs_register_esc_strfunc.3
deleted file mode 100644
index 8dcf866..0000000
--- a/man/man3/cs_register_esc_strfunc.3
+++ /dev/null
@@ -1,42 +0,0 @@
-.TH cs_register_esc_strfunc 3 "12 July 2007" "ClearSilver" "cs/cs.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cs_register_esc_strfunc - cs_register_strfunc with escaping context
-.SH SYNOPSIS
-.Ss
-#include <cs/cs.h>
-.Se
-.Ss
-NEOERR *cs_register_esc_strfunc(CSPARSE *parse, char *funcname,
- CSSTRFUNC str_func);
-
-.Se
-
-.SH ARGUMENTS
-parse - a pointer to a CSPARSE structure initialized with cs_init()
-.br
-funcname - the name for the CS function call
-.br
-Note that registering a duplicate funcname will
-.br
-raise a NERR_DUPLICATE error
-.br
-str_func - a CSSTRFUNC not-callback
-
-.SH DESCRIPTION
-cs_register_esc_strfunc functions exactly as cs_register_strfunc
-except that it changes the evaluation escaping context to disable
-default escaping.
-
-.SH "SEE ALSO"
-.BR cs_dump "(3), "cs_destroy "(3), "cs_render "(3), "cs_register_esc_strfunc "(3), "cs_arg_parsev "(3), "cs_register_fileload "(3), "cs_init "(3), "cs_register_strfunc "(3), "cs_arg_parse "(3), "cs_parse_string "(3), "cs_parse_file "(3), "= "(3), "cs_register_function
diff --git a/man/man3/cs_register_fileload.3 b/man/man3/cs_register_fileload.3
deleted file mode 100644
index fb4d351..0000000
--- a/man/man3/cs_register_fileload.3
+++ /dev/null
@@ -1,47 +0,0 @@
-.TH cs_register_fileload 3 "12 July 2007" "ClearSilver" "cs/cs.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cs_register_fileload - register a fileload function
-.SH SYNOPSIS
-.Ss
-#include <cs/cs.h>
-.Se
-.Ss
-void cs_register_fileload(CSPARSE *parse, void *ctx, CSFILELOAD fileload);
-
-.Se
-
-.SH ARGUMENTS
-parse - a pointer to an initialized CSPARSE structure
-.br
-ctx - pointer that is passed to the CSFILELOAD function when called
-.br
-fileload - a CSFILELOAD function
-
-.SH DESCRIPTION
-cs_register_fileload registers a fileload function that
-overrides the built-in function. The built-in function
-uses hdf_search_path and ne_file_load (based on stat/open/read)
-to find and load the file on every template render.
-You can override this function if you wish to provide
-other template search functions, or load the template
-from an in-memory cache, etc.
-This fileload function will be used by cs_parse, including
-
-include: commands in the template.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR cs_dump "(3), "cs_destroy "(3), "cs_render "(3), "cs_register_esc_strfunc "(3), "cs_arg_parsev "(3), "cs_register_fileload "(3), "cs_init "(3), "cs_register_strfunc "(3), "cs_arg_parse "(3), "cs_parse_string "(3), "cs_parse_file "(3), "= "(3), "cs_register_function
diff --git a/man/man3/cs_register_strfunc.3 b/man/man3/cs_register_strfunc.3
deleted file mode 100644
index 27d9b13..0000000
--- a/man/man3/cs_register_strfunc.3
+++ /dev/null
@@ -1,52 +0,0 @@
-.TH cs_register_strfunc 3 "12 July 2007" "ClearSilver" "cs/cs.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cs_register_strfunc - register a string handling function
-.SH SYNOPSIS
-.Ss
-#include <cs/cs.h>
-.Se
-.Ss
-NEOERR *cs_register_strfunc(CSPARSE *parse, char *funcname, CSSTRFUNC str_func);
-
-.Se
-
-.SH ARGUMENTS
-parse - a pointer to a CSPARSE structure initialized with cs_init()
-.br
-funcname - the name for the CS function call
-.br
-Note that registering a duplicate funcname will
-.br
-raise a NERR_DUPLICATE error
-.br
-str_func - a CSSTRFUNC not-callback
-
-.SH DESCRIPTION
-cs_register_strfunc will register a string function that
-can be called during CS render. This not-callback is
-designed to allow for string formating/escaping
-functions that are not built-in to CS (since CS is not
-HTML specific, for instance, but it is very useful to
-have CS have functions for javascript/html/url
-escaping). Note that we explicitly don't provide any
-associated data or anything to attempt to keep you from
-using this as a generic callback...
-The format of a CSSTRFUNC is:
-NEOERR * str_func(char *in, char **out);
-This function should not modify the input string, and
-should allocate the output string with a libc function.
-(as we will call free on it)
-
-.SH "SEE ALSO"
-.BR cs_dump "(3), "cs_destroy "(3), "cs_render "(3), "cs_register_esc_strfunc "(3), "cs_arg_parsev "(3), "cs_register_fileload "(3), "cs_init "(3), "cs_register_strfunc "(3), "cs_arg_parse "(3), "cs_parse_string "(3), "cs_parse_file "(3), "= "(3), "cs_register_function
diff --git a/man/man3/cs_render.3 b/man/man3/cs_render.3
deleted file mode 100644
index 0b8ca2d..0000000
--- a/man/man3/cs_render.3
+++ /dev/null
@@ -1,52 +0,0 @@
-.TH cs_render 3 "12 July 2007" "ClearSilver" "cs/cs.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-cs_render - render a CS parse tree
-.SH SYNOPSIS
-.Ss
-#include <cs/cs.h>
-.Se
-.Ss
-NEOERR *cs_render (CSPARSE *parse, void *ctx, CSOUTFUNC cb);
-
-.Se
-
-.SH ARGUMENTS
-parse - the CSPARSE structure containing the CS parse tree
-.br
-that will be evaluated
-.br
-ctx - user data that will be passed as the first variable to
-.br
-the CSOUTFUNC.
-.br
-cb - a CSOUTFUNC called to render the output. A CSOUTFUNC is
-.br
-defined as:
-.br
-typedef NEOERR* (*CSOUTFUNC)(void *, char *);
-
-.SH DESCRIPTION
-cs_render will evaluate a CS parse tree, calling the
-CSOUTFUNC passed to it for output. Note that calling
-cs_render multiple times on the same parse tree may or
-may not render the same output as the set statement has
-side-effects, it updates the HDF data used by the
-render. Typically, you will call one of the cs_parse
-functions before calling this function.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR cs_dump "(3), "cs_destroy "(3), "cs_render "(3), "cs_register_esc_strfunc "(3), "cs_arg_parsev "(3), "cs_register_fileload "(3), "cs_init "(3), "cs_register_strfunc "(3), "cs_arg_parse "(3), "cs_parse_string "(3), "cs_parse_file "(3), "= "(3), "cs_register_function
diff --git a/man/man3/dictCleanup.3 b/man/man3/dictCleanup.3
deleted file mode 100644
index b910cdc..0000000
--- a/man/man3/dictCleanup.3
+++ /dev/null
@@ -1,41 +0,0 @@
-.TH dictCleanup 3 "12 July 2007" "ClearSilver" "util/dict.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-dictCleanup - cleanup dictionary
-.SH SYNOPSIS
-.Ss
-#include <util/dict.h>
-.Se
-.Ss
-void dictCleanup(dictCtx dict, dictCleanupFunc cleanup, void *rock);
-
-.Se
-
-.SH ARGUMENTS
-dict - dictionary to cleanup
-.br
-cleanup - cleanup callback
-.br
-rock - to pass to <cleanup>
-
-.SH DESCRIPTION
-Calls <cleanup> for every item in <dict>. If <cleanup>
-returns true, then item is removed from <dict>.
-
-MT-Level: Safe if <dict> thread-safe.
-
-.SH "RETURN VALUE"
-None.
-
-.SH "SEE ALSO"
-.BR dictDestroy "(3), "dictCleanup "(3), "dictReleaseLock "(3), "dictRemove "(3), "dictNext "(3), "dictCreate "(3), "dictSetValue "(3), "dictModifyValue "(3), "dictSearch
diff --git a/man/man3/dictCreate.3 b/man/man3/dictCreate.3
deleted file mode 100644
index b28d22d..0000000
--- a/man/man3/dictCreate.3
+++ /dev/null
@@ -1,54 +0,0 @@
-.TH dictCreate 3 "12 July 2007" "ClearSilver" "util/dict.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-dictCreate - create new dictionary.
-.SH SYNOPSIS
-.Ss
-#include <util/dict.h>
-.Se
-.Ss
-NEOERR *dictCreate(dictCtx *dict, BOOL threaded, UINT32 root, UINT32 maxLevel,
- UINT32 flushLimit, BOOL useCase,
- dictFreeValueFunc freeValue, void *freeRock);
-
-.Se
-
-.SH ARGUMENTS
-threaded - true if list should be thread-safe.
-.br
-root - performance parameter (see above).
-.br
-maxLevel - performance parameter (see above).
-.br
-flushLimit - max deleted items to keep cached before
-.br
-forcing a flush.
-.br
-useCase - true to be case sensitive in identifiers
-.br
-freeValue - callback when freeing a value
-.br
-freeRock - context for freeValue callback
-
-.SH DESCRIPTION
-Returns a dictionary. If <threaded> is true, list is
-multi-thread safe. <root>, <maxLevel>, and <flushLimit>
-act as for skipNewList() (see skiplist.h)
-
-MT-Level: Safe.
-
-.SH "RETURN VALUE"
-None.
-
-.SH "SEE ALSO"
-.BR dictDestroy "(3), "dictCleanup "(3), "dictReleaseLock "(3), "dictRemove "(3), "dictNext "(3), "dictCreate "(3), "dictSetValue "(3), "dictModifyValue "(3), "dictSearch
diff --git a/man/man3/dictDestroy.3 b/man/man3/dictDestroy.3
deleted file mode 100644
index 4722041..0000000
--- a/man/man3/dictDestroy.3
+++ /dev/null
@@ -1,36 +0,0 @@
-.TH dictDestroy 3 "12 July 2007" "ClearSilver" "util/dict.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-dictDestroy - destroy dictionary.
-.SH SYNOPSIS
-.Ss
-#include <util/dict.h>
-.Se
-.Ss
-void dictDestroy(dictCtx dict);
-
-.Se
-
-.SH ARGUMENTS
-dict - dictionary to destroy
-
-.SH DESCRIPTION
-Release all resources used by <dict>.
-
-MT-Level: Safe for unique <dict>.
-
-.SH "RETURN VALUE"
-None.
-
-.SH "SEE ALSO"
-.BR dictDestroy "(3), "dictCleanup "(3), "dictReleaseLock "(3), "dictRemove "(3), "dictNext "(3), "dictCreate "(3), "dictSetValue "(3), "dictModifyValue "(3), "dictSearch
diff --git a/man/man3/dictModifyValue.3 b/man/man3/dictModifyValue.3
deleted file mode 100644
index f6eb942..0000000
--- a/man/man3/dictModifyValue.3
+++ /dev/null
@@ -1,48 +0,0 @@
-.TH dictModifyValue 3 "12 July 2007" "ClearSilver" "util/dict.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-dictModifyValue - create/modify an item.
-.SH SYNOPSIS
-.Ss
-#include <util/dict.h>
-.Se
-.Ss
-NEOERR *dictModifyValue(dictCtx dict, const char *id, dictNewValueCB new_cb,
- dictUpdateValueCB update, void *rock);
-
-.Se
-
-.SH ARGUMENTS
-dict - dictionary to add pair to.
-.br
-id - identifier of value
-.br
-new - function to call to create new value (may be NULL)
-.br
-update - function to call to modify value (if NULL, the old
-.br
-value is freed, and <new> is used)
-.br
-rock - context to pass to <new> or <update>.
-
-.SH DESCRIPTION
-Finds <id>'s value and calls <update>. If <id> is
-not in <dict>, calls <new> to obtain a new value.
-
-MT-Level: Safe if <dict> thread-safe.
-
-.SH "RETURN VALUE"
-None.
-
-.SH "SEE ALSO"
-.BR dictDestroy "(3), "dictCleanup "(3), "dictReleaseLock "(3), "dictRemove "(3), "dictNext "(3), "dictCreate "(3), "dictSetValue "(3), "dictModifyValue "(3), "dictSearch
diff --git a/man/man3/dictNext.3 b/man/man3/dictNext.3
deleted file mode 100644
index b365877..0000000
--- a/man/man3/dictNext.3
+++ /dev/null
@@ -1,51 +0,0 @@
-.TH dictNext 3 "12 July 2007" "ClearSilver" "util/dict.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-dictNext - search for next value in dictionary.
-.SH SYNOPSIS
-.Ss
-#include <util/dict.h>
-.Se
-.Ss
-void *dictNext(dictCtx dict, char **id, void **plock);
-
-.Se
-
-.SH ARGUMENTS
-dict - dictionary to iterate over.
-.br
-id - pointer to identifier of last item found, or
-.br
-pointer to NULL to retrieve first.
-.br
-plock - place for value lock (or NULL).
-
-.SH DESCRIPTION
-Can be used to iterate through values in the dictionary.
-The order is the order of the hash of the ids, which
-isn't usefully externally. Will return the value if
-found, or NULL if not. If <plock> is non-NULL, then
-the lock returned in <plock> will be associated with
-the returned value. Until this lock is passed to
-dictReleaseLock(), the value will not be passed to the
-dictCleanupFunc callback (see dictCleanup()).
-
-MT-Level: Safe if <dict> thread-safe.
-
-.SH "RETURN VALUE"
-plock - set to value lock.
-.br
-id - pointer to id of found value
-
-.SH "SEE ALSO"
-.BR dictDestroy "(3), "dictCleanup "(3), "dictReleaseLock "(3), "dictRemove "(3), "dictNext "(3), "dictCreate "(3), "dictSetValue "(3), "dictModifyValue "(3), "dictSearch
diff --git a/man/man3/dictReleaseLock.3 b/man/man3/dictReleaseLock.3
deleted file mode 100644
index fb13027..0000000
--- a/man/man3/dictReleaseLock.3
+++ /dev/null
@@ -1,40 +0,0 @@
-.TH dictReleaseLock 3 "12 July 2007" "ClearSilver" "util/dict.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-dictReleaseLock - release lock on value.
-.SH SYNOPSIS
-.Ss
-#include <util/dict.h>
-.Se
-.Ss
-void dictReleaseLock(dictCtx dict, void *lock);
-
-.Se
-
-.SH ARGUMENTS
-dict - dictionary containing value to release.
-.br
-lock - lock to release.
-
-.SH DESCRIPTION
-Releases the lock on the value associated with <lock>. Once
-the lock is released, the dictCleanupFunc callback can
-be called for the value (see dictCleanup()).
-
-MT-Level: Safe if <dict> thread-safe.
-
-.SH "RETURN VALUE"
-None.
-
-.SH "SEE ALSO"
-.BR dictDestroy "(3), "dictCleanup "(3), "dictReleaseLock "(3), "dictRemove "(3), "dictNext "(3), "dictCreate "(3), "dictSetValue "(3), "dictModifyValue "(3), "dictSearch
diff --git a/man/man3/dictRemove.3 b/man/man3/dictRemove.3
deleted file mode 100644
index 6e2f2b4..0000000
--- a/man/man3/dictRemove.3
+++ /dev/null
@@ -1,38 +0,0 @@
-.TH dictRemove 3 "12 July 2007" "ClearSilver" "util/dict.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-dictRemove - remove item from dictionary.
-.SH SYNOPSIS
-.Ss
-#include <util/dict.h>
-.Se
-.Ss
-BOOL dictRemove(dictCtx dict, const char *id);
-
-.Se
-
-.SH ARGUMENTS
-dict - dictionary to search in.
-.br
-id - identifier of item to remove.
-
-.SH DESCRIPTION
-Removes item identified by <id> from <dict>.
-
-MT-Level: Safe if <dict> thread-safe.
-
-.SH "RETURN VALUE"
-None.
-
-.SH "SEE ALSO"
-.BR dictDestroy "(3), "dictCleanup "(3), "dictReleaseLock "(3), "dictRemove "(3), "dictNext "(3), "dictCreate "(3), "dictSetValue "(3), "dictModifyValue "(3), "dictSearch
diff --git a/man/man3/dictSearch.3 b/man/man3/dictSearch.3
deleted file mode 100644
index 4a81ea0..0000000
--- a/man/man3/dictSearch.3
+++ /dev/null
@@ -1,45 +0,0 @@
-.TH dictSearch 3 "12 July 2007" "ClearSilver" "util/dict.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-dictSearch - search for value in dictionary.
-.SH SYNOPSIS
-.Ss
-#include <util/dict.h>
-.Se
-.Ss
-void *dictSearch(dictCtx dict, const char *id, void **plock);
-
-.Se
-
-.SH ARGUMENTS
-dict - dictionary to search in.
-.br
-id - identifier of item to find.
-.br
-plock - place for value lock (or NULL).
-
-.SH DESCRIPTION
-Searches for <id> in <dict>, and returns value if
-found, or NULL if not. If <plock> is non-NULL, then
-the lock returned in <plock> will be associated with
-the returned value. Until this lock is passed to
-dictReleaseLock(), the value will not be passed to the
-dictCleanupFunc callback (see dictCleanup()).
-
-MT-Level: Safe if <dict> thread-safe.
-
-.SH "RETURN VALUE"
-plock - set to value lock.
-
-.SH "SEE ALSO"
-.BR dictDestroy "(3), "dictCleanup "(3), "dictReleaseLock "(3), "dictRemove "(3), "dictNext "(3), "dictCreate "(3), "dictSetValue "(3), "dictModifyValue "(3), "dictSearch
diff --git a/man/man3/dictSetValue.3 b/man/man3/dictSetValue.3
deleted file mode 100644
index 814a0a6..0000000
--- a/man/man3/dictSetValue.3
+++ /dev/null
@@ -1,41 +0,0 @@
-.TH dictSetValue 3 "12 July 2007" "ClearSilver" "util/dict.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-dictSetValue - set/reset an items value.
-.SH SYNOPSIS
-.Ss
-#include <util/dict.h>
-.Se
-.Ss
-NEOERR *dictSetValue(dictCtx dict, const char *id, void *value);
-
-.Se
-
-.SH ARGUMENTS
-dict - dictionary to add pair to.
-.br
-id - identifier to insert/update
-.br
-value - value to store (may NOT be NULL)
-
-.SH DESCRIPTION
-Updates the <id>/<value> pair into <dict>.
-If <id> is not in <dict>, it is created.
-
-MT-Level: Safe if <dict> thread-safe.
-
-.SH "RETURN VALUE"
-None.
-
-.SH "SEE ALSO"
-.BR dictDestroy "(3), "dictCleanup "(3), "dictReleaseLock "(3), "dictRemove "(3), "dictNext "(3), "dictCreate "(3), "dictSetValue "(3), "dictModifyValue "(3), "dictSearch
diff --git a/man/man3/fCreate.3 b/man/man3/fCreate.3
deleted file mode 100644
index 342542c..0000000
--- a/man/man3/fCreate.3
+++ /dev/null
@@ -1,39 +0,0 @@
-.TH fCreate 3 "12 July 2007" "ClearSilver" "util/ulocks.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-fCreate - create a file lock.
-.SH SYNOPSIS
-.Ss
-#include <util/ulocks.h>
-.Se
-.Ss
-NEOERR *fCreate(int *plock, const char *file);
-
-.Se
-
-.SH ARGUMENTS
-plock - place for lock.
-.br
-file - path of file to use as lock.
-
-.SH DESCRIPTION
-Creates a file lock on named file <file>. The lock is
-returned in <plock>.
-
-MT-Level: Safe.
-
-.SH "RETURN VALUE"
-plock - set to lock identifier.
-
-.SH "SEE ALSO"
-.BR mCreate "(3), "fCreate "(3), "mUnlock "(3), "fUnlock "(3), "cBroadcast "(3), "cSignal "(3), "fFind "(3), "cDestroy "(3), "cCreate "(3), "mDestroy "(3), "cWait "(3), "fLock "(3), "fDestroy "(3), "mLock
diff --git a/man/man3/fDestroy.3 b/man/man3/fDestroy.3
deleted file mode 100644
index a362f3e..0000000
--- a/man/man3/fDestroy.3
+++ /dev/null
@@ -1,37 +0,0 @@
-.TH fDestroy 3 "12 July 2007" "ClearSilver" "util/ulocks.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-fDestroy - destroy a lock.
-.SH SYNOPSIS
-.Ss
-#include <util/ulocks.h>
-.Se
-.Ss
-void fDestroy(int lock);
-
-.Se
-
-.SH ARGUMENTS
-lock - Lock to destroy.
-
-.SH DESCRIPTION
-Destroys the lock <lock> that was created by fCreate()
-or fFind().
-
-MT-Level: Safe for unique <lock>.
-
-.SH "RETURN VALUE"
-None.
-
-.SH "SEE ALSO"
-.BR mCreate "(3), "fCreate "(3), "mUnlock "(3), "fUnlock "(3), "cBroadcast "(3), "cSignal "(3), "fFind "(3), "cDestroy "(3), "cCreate "(3), "mDestroy "(3), "cWait "(3), "fLock "(3), "fDestroy "(3), "mLock
diff --git a/man/man3/fFind.3 b/man/man3/fFind.3
deleted file mode 100644
index cdb80b6..0000000
--- a/man/man3/fFind.3
+++ /dev/null
@@ -1,40 +0,0 @@
-.TH fFind 3 "12 July 2007" "ClearSilver" "util/ulocks.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-fFind - find a file lock.
-.SH SYNOPSIS
-.Ss
-#include <util/ulocks.h>
-.Se
-.Ss
-NEOERR *fFind(int *plock, const char *file);
-
-.Se
-
-.SH ARGUMENTS
-plock - place for lock.
-.br
-file - path of file to use as lock.
-
-.SH DESCRIPTION
-Find a file identified by the path <file>, and returns a
-lock identifier for it in <plock>. If the file doesn't
-exist, returns true.
-
-MT-Level: Safe.
-
-.SH "RETURN VALUE"
-plock - set to lock identifier.
-
-.SH "SEE ALSO"
-.BR mCreate "(3), "fCreate "(3), "mUnlock "(3), "fUnlock "(3), "cBroadcast "(3), "cSignal "(3), "fFind "(3), "cDestroy "(3), "cCreate "(3), "mDestroy "(3), "cWait "(3), "fLock "(3), "fDestroy "(3), "mLock
diff --git a/man/man3/fLock.3 b/man/man3/fLock.3
deleted file mode 100644
index 840ff4b..0000000
--- a/man/man3/fLock.3
+++ /dev/null
@@ -1,37 +0,0 @@
-.TH fLock 3 "12 July 2007" "ClearSilver" "util/ulocks.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-fLock - acquire file lock.
-.SH SYNOPSIS
-.Ss
-#include <util/ulocks.h>
-.Se
-.Ss
-NEOERR *fLock(int lock);
-
-.Se
-
-.SH ARGUMENTS
-lock - Lock to acquire.
-
-.SH DESCRIPTION
-Acquires the lock identified by <lock>. This call
-blocks until the lock is acquired.
-
-MT-Level: Safe.
-
-.SH "RETURN VALUE"
-None.
-
-.SH "SEE ALSO"
-.BR mCreate "(3), "fCreate "(3), "mUnlock "(3), "fUnlock "(3), "cBroadcast "(3), "cSignal "(3), "fFind "(3), "cDestroy "(3), "cCreate "(3), "mDestroy "(3), "cWait "(3), "fLock "(3), "fDestroy "(3), "mLock
diff --git a/man/man3/fUnlock.3 b/man/man3/fUnlock.3
deleted file mode 100644
index 5da3a28..0000000
--- a/man/man3/fUnlock.3
+++ /dev/null
@@ -1,36 +0,0 @@
-.TH fUnlock 3 "12 July 2007" "ClearSilver" "util/ulocks.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-fUnlock - release file lock.
-.SH SYNOPSIS
-.Ss
-#include <util/ulocks.h>
-.Se
-.Ss
-void fUnlock(int lock);
-
-.Se
-
-.SH ARGUMENTS
-lock - Lock to release.
-
-.SH DESCRIPTION
-Releases the lock identified by <lock>.
-
-MT-Level: Safe.
-
-.SH "RETURN VALUE"
-None.
-
-.SH "SEE ALSO"
-.BR mCreate "(3), "fCreate "(3), "mUnlock "(3), "fUnlock "(3), "cBroadcast "(3), "cSignal "(3), "fFind "(3), "cDestroy "(3), "cCreate "(3), "mDestroy "(3), "cWait "(3), "fLock "(3), "fDestroy "(3), "mLock
diff --git a/man/man3/filter_create_fd.3 b/man/man3/filter_create_fd.3
deleted file mode 100644
index ef28c04..0000000
--- a/man/man3/filter_create_fd.3
+++ /dev/null
@@ -1,66 +0,0 @@
-.TH filter_create_fd 3 "12 July 2007" "ClearSilver" "util/filter.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-filter_create_fd - Create a sub process and return the
-requested pipes
-.SH SYNOPSIS
-.Ss
-#include <util/filter.h>
-.Se
-.Ss
-NEOERR *filter_create_fd(const char *cmd, int *fdin, int *fdout, int *fderr,
- pid_t *pid);
-
-.Se
-
-.SH ARGUMENTS
-cmd -> the sub command to execute. Will be executed with
-.br
-/bin/sh -c
-.br
-fdin -> pointer to return the stdin pipe, or NULL if you don't
-.br
-want the stdin pipe
-.br
-fdout -> pointer to return the stdout pipe, or NULL if you don't
-.br
-want the stdout pipe
-.br
-fderr -> pointer to return the stderr pipe, or NULL if you don't
-.br
-want the stderr pipe
-
-.SH DESCRIPTION
-filter_create_fd and filter_create_fp are what popen
-
-been: a mechanism to create sub processes
-and have pipes to all their input/output. The concept
-was taken from mutt, though python has something similar
-with popen3/popen4. You control which pipes the
-function returns by the fdin/fdout/fderr arguments. A
-NULL value means "don't create a pipe", a pointer to an
-int will cause the pipes to be created and the value
-of the file descriptor stored in the int. You will have
-to close(2) the file descriptors yourself.
-
-.SH "RETURN VALUE"
-fdin -> the stdin file descriptor of the sub process
-.br
-fdout -> the stdout file descriptor of the sub process
-.br
-fderr -> the stderr file descriptor of the sub process
-.br
-pid -> the pid of the sub process
-
-.SH "SEE ALSO"
-.BR filter_wait "(3), "filter_create_fp "(3), "filter_create_fd
diff --git a/man/man3/filter_create_fp.3 b/man/man3/filter_create_fp.3
deleted file mode 100644
index 976a240..0000000
--- a/man/man3/filter_create_fp.3
+++ /dev/null
@@ -1,57 +0,0 @@
-.TH filter_create_fp 3 "12 July 2007" "ClearSilver" "util/filter.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-filter_create_fp - similar to filter_create_fd except with
-buffered FILE*
-.SH SYNOPSIS
-.Ss
-#include <util/filter.h>
-.Se
-.Ss
-NEOERR *filter_create_fp(const char *cmd, FILE **in, FILE **out, FILE **err,
- pid_t *pid);
-
-.Se
-
-.SH ARGUMENTS
-cmd -> the sub command to execute. Will be executed with
-.br
-/bin/sh -c
-.br
-in -> pointer to return the stdin pipe, or NULL if you don't
-.br
-want the stdin pipe
-.br
-out -> pointer to return the stdout pipe, or NULL if you don't
-.br
-want the stdout pipe
-.br
-err -> pointer to return the stderr pipe, or NULL if you don't
-.br
-want the stderr pipe
-
-.SH DESCRIPTION
-filter_create_fp is identical to filter_create_fd,
-except each of the pipes is wrapped in a buffered stdio FILE
-
-.SH "RETURN VALUE"
-in -> the stdin FILE of the sub process
-.br
-out -> the stdout FILE of the sub process
-.br
-err -> the stderr FILE of the sub process
-.br
-pid -> the pid of the sub process
-
-.SH "SEE ALSO"
-.BR filter_wait "(3), "filter_create_fp "(3), "filter_create_fd
diff --git a/man/man3/filter_wait.3 b/man/man3/filter_wait.3
deleted file mode 100644
index a611723..0000000
--- a/man/man3/filter_wait.3
+++ /dev/null
@@ -1,42 +0,0 @@
-.TH filter_wait 3 "12 July 2007" "ClearSilver" "util/filter.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-filter_wait - wrap waitpid to decode the exitcode and why
-your filter quit
-.SH SYNOPSIS
-.Ss
-#include <util/filter.h>
-.Se
-.Ss
-NEOERR *filter_wait(pid_t pid, int options, int *exitcode);
-
-.Se
-
-.SH ARGUMENTS
-pid -> the process identifier to wait for
-.br
-options -> the options to pass to waitpid (see wait(2))
-
-.SH DESCRIPTION
-filter_wait wraps the waitpid call and raises an error
-(with description) if the call failed. Note that if the
-ask for the exitcode and the process exited with a code
-other than zero, we don't raise an error. If you don't
-ask for the exitcode, and it is non-zero, we raise an
-error
-
-.SH "RETURN VALUE"
-exitcode -> the exitcode if the process existed normally
-
-.SH "SEE ALSO"
-.BR filter_wait "(3), "filter_create_fp "(3), "filter_create_fd
diff --git a/man/man3/hdf_copy.3 b/man/man3/hdf_copy.3
deleted file mode 100644
index e8e0377..0000000
--- a/man/man3/hdf_copy.3
+++ /dev/null
@@ -1,40 +0,0 @@
-.TH hdf_copy 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_copy - copy part of an HDF dataset to another
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-NEOERR* hdf_copy (HDF *dest_hdf, const char *name, HDF *src);
-
-.Se
-
-.SH ARGUMENTS
-dest_hdf -> the destination dataset
-.br
-name -> the name of the destination node
-.br
-src -> the hdf dataset to copy to the destination
-
-.SH DESCRIPTION
-hdf_copy is a deep copy of an HDF tree pointed to by
-src to the named node of dest. dest and src need not be
-part of the same data set
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_destroy.3 b/man/man3/hdf_destroy.3
deleted file mode 100644
index 093abe3..0000000
--- a/man/man3/hdf_destroy.3
+++ /dev/null
@@ -1,39 +0,0 @@
-.TH hdf_destroy 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_destroy - deallocate an HDF data set
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-void hdf_destroy (HDF **hdf);
-
-.Se
-
-.SH ARGUMENTS
-hdf - pointer to an HDF data set allocated with hdf_init
-
-.SH DESCRIPTION
-hdf_destroy is used to deallocate all memory associated
-with an hdf data set. Although you can pass an HDF node
-as an argument to this function, you are likely to cause
-a segfault if you continue to access the data set. In
-the future, we may restrict hdf_destroy so it only works
-on the top level node.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_dump.3 b/man/man3/hdf_dump.3
deleted file mode 100644
index dcc58f3..0000000
--- a/man/man3/hdf_dump.3
+++ /dev/null
@@ -1,29 +0,0 @@
-.TH hdf_dump 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_dump - dump an HDF dataset to stdout
-Description:
-Input:
-Output:
-Returns:
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-NEOERR* hdf_dump (HDF *hdf, const char *prefix);
-
-.Se
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_dump_format.3 b/man/man3/hdf_dump_format.3
deleted file mode 100644
index aac5429..0000000
--- a/man/man3/hdf_dump_format.3
+++ /dev/null
@@ -1,29 +0,0 @@
-.TH hdf_dump_format 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_dump_format - dump an HDF dataset to FILE *fp
-Description:
-Input:
-Output:
-Returns:
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-NEOERR* hdf_dump_format (HDF *hdf, int lvl, FILE *fp);
-
-.Se
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_dump_str.3 b/man/man3/hdf_dump_str.3
deleted file mode 100644
index da29bf8..0000000
--- a/man/man3/hdf_dump_str.3
+++ /dev/null
@@ -1,29 +0,0 @@
-.TH hdf_dump_str 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_dump_str - dump an HDF dataset to STRING
-Description:
-Input:
-Output:
-Returns:
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-NEOERR* hdf_dump_str(HDF *hdf, const char *prefix, int compact, STRING *str);
-
-.Se
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_get_attr.3 b/man/man3/hdf_get_attr.3
deleted file mode 100644
index 2c4e847..0000000
--- a/man/man3/hdf_get_attr.3
+++ /dev/null
@@ -1,29 +0,0 @@
-.TH hdf_get_attr 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_get_attr -
-Description:
-Input:
-Output:
-Returns:
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-HDF_ATTR* hdf_get_attr (HDF *hdf, const char *name);
-
-.Se
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_get_child.3 b/man/man3/hdf_get_child.3
deleted file mode 100644
index aaa67fa..0000000
--- a/man/man3/hdf_get_child.3
+++ /dev/null
@@ -1,37 +0,0 @@
-.TH hdf_get_child 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_get_child - return the first child of the named node
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-HDF* hdf_get_child (HDF *hdf, const char *name);
-
-.Se
-
-.SH ARGUMENTS
-hdf -> the dataset node to start from
-.br
-name -> the name to walk to
-
-.SH DESCRIPTION
-hdf_get_child will walk the dataset starting at hdf to
-name, and return the first child of that node
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_get_copy.3 b/man/man3/hdf_get_copy.3
deleted file mode 100644
index 004bf8d..0000000
--- a/man/man3/hdf_get_copy.3
+++ /dev/null
@@ -1,44 +0,0 @@
-.TH hdf_get_copy 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_get_copy - Returns a copy of a string in the HDF data set
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-NEOERR* hdf_get_copy (HDF *hdf, const char *name, char **value,
- const char *defval);
-
-.Se
-
-.SH ARGUMENTS
-hdf -> the dataset node to start from
-.br
-name -> the name to walk the data set to
-.br
-defval -> the default value to return if the node doesn't
-.br
-exist
-
-.SH DESCRIPTION
-hdf_get_copy is similar to hdf_get_value, except that it
-returns an malloc'd copy of the string.
-
-.SH "RETURN VALUE"
-value -> the allocated string (if defval = NULL, then value
-.br
-will be NULL if defval is used)
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_get_int_value.3 b/man/man3/hdf_get_int_value.3
deleted file mode 100644
index 59d7b62..0000000
--- a/man/man3/hdf_get_int_value.3
+++ /dev/null
@@ -1,44 +0,0 @@
-.TH hdf_get_int_value 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_get_int_value - Return the integer value of a point in
-the data set
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-int hdf_get_int_value (HDF *hdf, const char *name, int defval);
-
-.Se
-
-.SH ARGUMENTS
-hdf -> a node in an HDF data set
-.br
-name -> the name of a node to walk to in the data set
-.br
-defval -> value to return in case of error or if the node
-.br
-doesn't exist
-
-.SH DESCRIPTION
-hdf_get_int_value walks the HDF data set pointed to by
-hdf to name, and returns the value of that node
-converted to an integer. If that node does not exist,
-or it does not contain a number, the defval is returned.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_get_node.3 b/man/man3/hdf_get_node.3
deleted file mode 100644
index 955e7e6..0000000
--- a/man/man3/hdf_get_node.3
+++ /dev/null
@@ -1,40 +0,0 @@
-.TH hdf_get_node 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_get_node - Similar to hdf_get_obj except all the nodes
-are created if the don't exist.
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-NEOERR * hdf_get_node (HDF *hdf, const char *name, HDF **ret);
-
-.Se
-
-.SH ARGUMENTS
-hdf -> the dataset node to start from
-.br
-name -> the name to walk to
-
-.SH DESCRIPTION
-hdf_get_node is similar to hdf_get_obj, except instead
-of stopping if it can't find a node in the tree, it will
-create all of the nodes necessary to hand you back the
-node you ask for. Nodes are created with no value.
-
-.SH "RETURN VALUE"
-ret -> the dataset node you asked for
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_get_obj.3 b/man/man3/hdf_get_obj.3
deleted file mode 100644
index 0b3f6e8..0000000
--- a/man/man3/hdf_get_obj.3
+++ /dev/null
@@ -1,37 +0,0 @@
-.TH hdf_get_obj 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_get_obj - return the HDF data set node at a named location
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-HDF* hdf_get_obj (HDF *hdf, const char *name);
-
-.Se
-
-.SH ARGUMENTS
-hdf -> the dataset node to start from
-.br
-name -> the name to walk to
-
-.SH DESCRIPTION
-hdf_get_obj walks the dataset given by hdf to the node
-named name, and then returns the pointer to that node
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_get_value.3 b/man/man3/hdf_get_value.3
deleted file mode 100644
index 9f36003..0000000
--- a/man/man3/hdf_get_value.3
+++ /dev/null
@@ -1,42 +0,0 @@
-.TH hdf_get_value 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_get_value - Return the value of a node in the data set
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-char *hdf_get_value (HDF *hdf, const char *name, const char *defval);
-
-.Se
-
-.SH ARGUMENTS
-hdf -> the dataset node to start from
-.br
-name -> the name to walk the data set to
-.br
-defval -> the default value to return if the node doesn't
-.br
-exist
-
-.SH DESCRIPTION
-hdf_get_value walks the data set pointed to by hdf via
-name and returns the string value located there, or
-defval if the node doesn't exist
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_get_valuef.3 b/man/man3/hdf_get_valuef.3
deleted file mode 100644
index 30ffbe7..0000000
--- a/man/man3/hdf_get_valuef.3
+++ /dev/null
@@ -1,43 +0,0 @@
-.TH hdf_get_valuef 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_get_valuef - Return the value of a node in the data set
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-char* hdf_get_valuef (HDF *hdf, const char *namefmt, ...)
- ATTRIBUTE_PRINTF(2,3);
-
-.Se
-
-.SH ARGUMENTS
-hdf -> the dataset node to start from
-.br
-namefmt -> the printf-style format string
-.br
-... -> arguments to fill out namefmt
-
-.SH DESCRIPTION
-hdf_get_valuef walks the data set pointed to by hdf via
-namefmt printf expanded with varargs, and returns the
-string value located there, or NULL if it doesn't exist.
-This differs from hdf_get_value in that there is no
-default value possible.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_get_valuevf.3 b/man/man3/hdf_get_valuevf.3
deleted file mode 100644
index d5a0396..0000000
--- a/man/man3/hdf_get_valuevf.3
+++ /dev/null
@@ -1,42 +0,0 @@
-.TH hdf_get_valuevf 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_get_valuevf - Return the value of a node in the data set
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-char* hdf_get_valuevf (HDF *hdf, const char *namefmt, va_list ap);
-
-.Se
-
-.SH ARGUMENTS
-hdf -> the dataset node to start from
-.br
-namefmt -> the format string
-.br
-ap -> va_list of varargs
-
-.SH DESCRIPTION
-hdf_get_valuevf walks the data set pointed to by hdf via
-namefmt printf expanded with varargs ap, and returns the
-string value located there, or NULL if it doesn't exist.
-This differs from hdf_get_value in that there is no
-default value possible.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_init.3 b/man/man3/hdf_init.3
deleted file mode 100644
index 9b6789e..0000000
--- a/man/man3/hdf_init.3
+++ /dev/null
@@ -1,35 +0,0 @@
-.TH hdf_init 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_init - Initialize an HDF data set
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-NEOERR* hdf_init (HDF **hdf);
-
-.Se
-
-.SH ARGUMENTS
-hdf - pointer to an HDF pointer
-
-.SH DESCRIPTION
-hdf_init initializes an HDF data set and returns the
-pointer to the top node in the data set.
-
-.SH "RETURN VALUE"
-hdf - allocated hdf node
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_obj_attr.3 b/man/man3/hdf_obj_attr.3
deleted file mode 100644
index 3988fc2..0000000
--- a/man/man3/hdf_obj_attr.3
+++ /dev/null
@@ -1,29 +0,0 @@
-.TH hdf_obj_attr 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_obj_attr - Return the HDF Attributes for a node
-Description:
-Input:
-Output:
-Returns:
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-HDF_ATTR* hdf_obj_attr (HDF *hdf);
-
-.Se
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_obj_child.3 b/man/man3/hdf_obj_child.3
deleted file mode 100644
index 5e1bdee..0000000
--- a/man/man3/hdf_obj_child.3
+++ /dev/null
@@ -1,38 +0,0 @@
-.TH hdf_obj_child 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_obj_child - Return the first child of a dataset node
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-HDF* hdf_obj_child (HDF *hdf);
-
-.Se
-
-.SH ARGUMENTS
-hdf -> the hdf dataset node
-
-.SH DESCRIPTION
-hdf_obj_child and the other hdf_obj_ functions are
-accessors to the HDF dataset. Although we do not
-currently "hide" the HDF struct implementation, we
-recommend you use the accessor functions instead of
-accessing the values directly.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_obj_name.3 b/man/man3/hdf_obj_name.3
deleted file mode 100644
index 93e212f..0000000
--- a/man/man3/hdf_obj_name.3
+++ /dev/null
@@ -1,36 +0,0 @@
-.TH hdf_obj_name 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_obj_name - Return the name of a node
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-char* hdf_obj_name (HDF *hdf);
-
-.Se
-
-.SH ARGUMENTS
-hdf -> the hdf dataset node
-
-.SH DESCRIPTION
-hdf_obj_name is an accessor function for a datset node
-which returns the name of the node. This is just the
-local name, and not the full path.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_obj_next.3 b/man/man3/hdf_obj_next.3
deleted file mode 100644
index a6d18fd..0000000
--- a/man/man3/hdf_obj_next.3
+++ /dev/null
@@ -1,34 +0,0 @@
-.TH hdf_obj_next 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_obj_next - Return the next node of a dataset level
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-HDF* hdf_obj_next (HDF *hdf);
-
-.Se
-
-.SH ARGUMENTS
-hdf -> the hdf dataset node
-
-.SH DESCRIPTION
-hdf_obj_next is an accessor function for the HDF struct
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_obj_top.3 b/man/man3/hdf_obj_top.3
deleted file mode 100644
index a0209ba..0000000
--- a/man/man3/hdf_obj_top.3
+++ /dev/null
@@ -1,39 +0,0 @@
-.TH hdf_obj_top 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_obj_top - Return the pointer to the top dataset node
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-HDF* hdf_obj_top (HDF *hdf);
-
-.Se
-
-.SH ARGUMENTS
-hdf -> the hdf dataset node
-
-.SH DESCRIPTION
-hdf_obj_top is an accessor function which returns a
-pointer to the top of the dataset, the node which was
-returned by hdf_init. This is most useful for
-implementations of language wrappers where individual
-nodes are tied garbage colletion wise to the top node of
-the data set
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_obj_value.3 b/man/man3/hdf_obj_value.3
deleted file mode 100644
index 2084e81..0000000
--- a/man/man3/hdf_obj_value.3
+++ /dev/null
@@ -1,37 +0,0 @@
-.TH hdf_obj_value 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_obj_value - Return the value of a node
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-char* hdf_obj_value (HDF *hdf);
-
-.Se
-
-.SH ARGUMENTS
-hdf -> the hdf dataset node
-
-.SH DESCRIPTION
-hdf_obj_value is an accessor function for a dataset node
-which returns the value of the node, or NULL if the node
-has no value. This is not a copy of the value, so the
-node retains ownership of the value
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_read_string.3 b/man/man3/hdf_read_string.3
deleted file mode 100644
index 5666915..0000000
--- a/man/man3/hdf_read_string.3
+++ /dev/null
@@ -1,28 +0,0 @@
-.TH hdf_read_string 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_read_string - read an HDF string
-Description:
-Input:
-Output:
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-NEOERR* hdf_read_string (HDF *hdf, const char *s);
-
-.Se
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_read_string_ignore.3 b/man/man3/hdf_read_string_ignore.3
deleted file mode 100644
index ae2783a..0000000
--- a/man/man3/hdf_read_string_ignore.3
+++ /dev/null
@@ -1,28 +0,0 @@
-.TH hdf_read_string_ignore 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_read_string_ignore - Read an HDF string and ignore errors
-Description:
-Input:
-Output:
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-NEOERR* hdf_read_string_ignore (HDF *hdf, const char *s, int ignore);
-
-.Se
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_register_fileload.3 b/man/man3/hdf_register_fileload.3
deleted file mode 100644
index 41c5e67..0000000
--- a/man/man3/hdf_register_fileload.3
+++ /dev/null
@@ -1,44 +0,0 @@
-.TH hdf_register_fileload 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_register_fileload - register a fileload function
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-void hdf_register_fileload(HDF *hdf, void *ctx, HDFFILELOAD fileload);
-
-.Se
-
-.SH ARGUMENTS
-hdf - pointer to a head HDF node
-.br
-ctx - pointer that is passed to the HDFFILELOAD function when called
-.br
-fileload - a HDFFILELOAD function
-
-.SH DESCRIPTION
-hdf_register_fileload registers a fileload function that
-overrides the built-in function. The built-in function
-uses hdf_search_path and ne_file_load (based on stat/open/read)
-to find and load the file on every hdf_read_file (including
-#include). You can override this function if you wish to provide
-other file search functions, or load the hdf file
-from an in-memory cache, etc.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_remove_tree.3 b/man/man3/hdf_remove_tree.3
deleted file mode 100644
index 32005d6..0000000
--- a/man/man3/hdf_remove_tree.3
+++ /dev/null
@@ -1,29 +0,0 @@
-.TH hdf_remove_tree 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_remove_tree - delete a subtree of an HDF dataset
-Description:
-Input:
-Output:
-Returns:
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-NEOERR* hdf_remove_tree (HDF *hdf, const char *name);
-
-.Se
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_search_path.3 b/man/man3/hdf_search_path.3
deleted file mode 100644
index f335f95..0000000
--- a/man/man3/hdf_search_path.3
+++ /dev/null
@@ -1,41 +0,0 @@
-.TH hdf_search_path 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_search_path - Find a file given a search path in HDF
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-NEOERR* hdf_search_path (HDF *hdf, const char *path, char *full);
-
-.Se
-
-.SH ARGUMENTS
-hdf -> the hdf dataset to use
-.br
-path -> the relative path
-.br
-full -> a pointer to a _POSIX_PATH_MAX buffer
-
-.SH DESCRIPTION
-hdf_search_path is a convenience/utility function that
-searches for relative filenames in a search path. The
-search path is the list given by the children of
-hdf.loadpaths.
-
-.SH "RETURN VALUE"
-full -> the full path of the file
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_set_attr.3 b/man/man3/hdf_set_attr.3
deleted file mode 100644
index 25ef237..0000000
--- a/man/man3/hdf_set_attr.3
+++ /dev/null
@@ -1,30 +0,0 @@
-.TH hdf_set_attr 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_set_attr -
-Description:
-Input:
-Output:
-Returns:
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-NEOERR* hdf_set_attr (HDF *hdf, const char *name, const char *key,
- const char *value);
-
-.Se
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_set_buf.3 b/man/man3/hdf_set_buf.3
deleted file mode 100644
index 31ff99a..0000000
--- a/man/man3/hdf_set_buf.3
+++ /dev/null
@@ -1,43 +0,0 @@
-.TH hdf_set_buf 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_set_buf - Set the value of a node without duplicating
-the value
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-NEOERR* hdf_set_buf (HDF *hdf, const char *name, char *value);
-
-.Se
-
-.SH ARGUMENTS
-hdf -> the hdf dataset node
-.br
-name -> the name to walk to
-.br
-value -> the malloc'd value
-
-.SH DESCRIPTION
-hdf_set_buf is similar to hdf_set_value, except the
-dataset takes ownership of the value instead of making a
-copy of it. The dataset assumes that value was
-malloc'd, since it will attempt to free it when
-hdf_destroy is called
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_set_copy.3 b/man/man3/hdf_set_copy.3
deleted file mode 100644
index 35bcc32..0000000
--- a/man/man3/hdf_set_copy.3
+++ /dev/null
@@ -1,41 +0,0 @@
-.TH hdf_set_copy 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_set_copy -> Copy a value from one location in the
-dataset to another
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-NEOERR* hdf_set_copy (HDF *hdf, const char *dest, const char *src);
-
-.Se
-
-.SH ARGUMENTS
-hdf -> the pointer to the dataset node
-.br
-dest -> the name of the destination node
-.br
-src -> the name of the source node
-
-.SH DESCRIPTION
-hdf_set_copy first walks the hdf dataset to the named src
-node, and then copies that value to the named dest node.
-If the src node is not found, an error is raised.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_set_int_value.3 b/man/man3/hdf_set_int_value.3
deleted file mode 100644
index 69f304c..0000000
--- a/man/man3/hdf_set_int_value.3
+++ /dev/null
@@ -1,40 +0,0 @@
-.TH hdf_set_int_value 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_set_int_value - Set the value of a named node to a number
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-NEOERR* hdf_set_int_value (HDF *hdf, const char *name, int value);
-
-.Se
-
-.SH ARGUMENTS
-hdf -> the pointer to the hdf dataset
-.br
-name -> the named node to walk to
-.br
-value -> the value to set the node to
-
-.SH DESCRIPTION
-hdf_set_int_value is a helper function that maps an
-integer to a string, and then calls hdf_set_value with
-that string
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_set_symlink.3 b/man/man3/hdf_set_symlink.3
deleted file mode 100644
index 5da5736..0000000
--- a/man/man3/hdf_set_symlink.3
+++ /dev/null
@@ -1,50 +0,0 @@
-.TH hdf_set_symlink 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_set_symlink - Set part of the tree to link to another
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-NEOERR *hdf_set_symlink (HDF *hdf, const char *src, const char *dest);
-
-.Se
-
-.SH ARGUMENTS
-hdf -> the dataset node
-.br
-src -> the source node name
-.br
-dest -> the destination node name (from the top of the
-.br
-dataset, not relative names)
-
-.SH DESCRIPTION
-hdf_set_symlink creates a link between two sections of
-an HDF dataset. The link is "by name" hence the term
-"symlink". This means that the destination node does
-not need to exist. Any attempt to access the source
-node will cause the function to walk to the dest node,
-and then continue walking from there. Using symlinks
-can "hide" values in the dataset since you won't be able
-to access any children of the linked node directly,
-though dumps and other things which access the data
-structure directly will bypass the symlink. Use this
-feature sparingly as its likely to surprise you.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_set_value.3 b/man/man3/hdf_set_value.3
deleted file mode 100644
index 9b4a61c..0000000
--- a/man/man3/hdf_set_value.3
+++ /dev/null
@@ -1,46 +0,0 @@
-.TH hdf_set_value 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_set_value - Set the value of a named node
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-NEOERR* hdf_set_value (HDF *hdf, const char *name, const char *value);
-
-.Se
-
-.SH ARGUMENTS
-hdf -> the pointer to the hdf dataset
-.br
-name -> the named node to walk to
-.br
-value -> the value to set the node to
-
-.SH DESCRIPTION
-hdf_set_value will set the value of a named node. All
-of the interstitial nodes which don't exist will be
-created with a value of NULL. Existing nodes are not
-modified. New nodes are created at the end of the list.
-If a list of nodes exceeds FORCE_HASH_AT, then a HASH
-will be created at that level and all of the nodes will
-be added to the hash for faster lookup times.
-The copy of the value will be made which the dataset
-will own.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_set_valuef.3 b/man/man3/hdf_set_valuef.3
deleted file mode 100644
index ce4f051..0000000
--- a/man/man3/hdf_set_valuef.3
+++ /dev/null
@@ -1,51 +0,0 @@
-.TH hdf_set_valuef 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_set_valuef - Set the value of a named node
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-NEOERR* hdf_set_valuef (HDF *hdf, const char *fmt, ...)
- ATTRIBUTE_PRINTF(2,3);
-
-.Se
-
-.SH ARGUMENTS
-hdf -> the pointer to the hdf dataset
-.br
-fmt -> the name=value printf(3) format string
-
-.SH DESCRIPTION
-hdf_set_valuef is a convenience function that wraps
-hdf_set_value. Due to limitations of C, the fmt is in
-the format "name=value", where we will first format the
-entire string, and then break it at the first (from the
-left) equal sign (=) and use the left portion as the
-name and the right portion as the value. This function
-is somewhat inefficient in that it first allocates the
-full name=value, and then the call to hdf_set_value
-duplicates the value portion, and then we free the
-name=value.
-Currently, we don't strip whitespace from the key or
-value. In the future, this function might work more
-like reading a single line of an HDF string or file,
-allowing for attributes and symlinks to be specified...
-maybe.
-
-.SH "RETURN VALUE"
-None
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_sort_obj.3 b/man/man3/hdf_sort_obj.3
deleted file mode 100644
index 8b4c514..0000000
--- a/man/man3/hdf_sort_obj.3
+++ /dev/null
@@ -1,63 +0,0 @@
-.TH hdf_sort_obj 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_sort_obj - sort the children of an HDF node
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-hdf_sort_obj()
-.Se
-
-.SH ARGUMENTS
-h - HDF node
-.br
-compareFunc - function which returns 1,0,-1 depending on some
-.br
-criteria. The arguments to this sort function
-.br
-are pointers to pointers to HDF elements. For
-.br
-example:
-.br
-int sortByName(const void *a, const void *b) {
-.br
-HDF **ha = (HDF **)a;
-.br
-HDF **hb = (HDF **)b;
-.br
-*
-.br
-return strcasecmp(hdf_obj_name(*ha), hdf_obj_name(*hb));
-.br
-}
-.br
-*
-
-.SH DESCRIPTION
-hdf_sort_obj will sort the children of an HDF node,
-based on the given comparison function.
-This function works by creating an array of the pointers
-for each child object of h, using qsort to sort that
-array, and then re-ordering the linked list of children
-to the new order. The qsort compare function uses a
-pointer to the value in the array, which in our case is
-a pointer to an HDF struct, so your comparison function
-should work on HDF ** pointers.
-
-.SH "RETURN VALUE"
-None (h children will be sorted)
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_write_file.3 b/man/man3/hdf_write_file.3
deleted file mode 100644
index e16dfd5..0000000
--- a/man/man3/hdf_write_file.3
+++ /dev/null
@@ -1,28 +0,0 @@
-.TH hdf_write_file 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_write_file - write an HDF data file
-Description:
-Input:
-Output:
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-NEOERR* hdf_write_file (HDF *hdf, const char *path);
-
-.Se
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_write_file_atomic.3 b/man/man3/hdf_write_file_atomic.3
deleted file mode 100644
index 290d124..0000000
--- a/man/man3/hdf_write_file_atomic.3
+++ /dev/null
@@ -1,33 +0,0 @@
-.TH hdf_write_file_atomic 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_write_file_atomic - write an HDF data file atomically
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-NEOERR* hdf_write_file_atomic (HDF *hdf, const char *path);
-
-.Se
-
-.SH DESCRIPTION
-hdf_write_file_atomic is similar to hdf_write_file,
-except the new file is created with a unique name and
-then rename(2) is used to atomically replace the old
-file with the new file
-Input:
-Output:
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/hdf_write_string.3 b/man/man3/hdf_write_string.3
deleted file mode 100644
index fa22cac..0000000
--- a/man/man3/hdf_write_string.3
+++ /dev/null
@@ -1,28 +0,0 @@
-.TH hdf_write_string 3 "12 July 2007" "ClearSilver" "util/neo_hdf.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-hdf_write_string - serialize an HDF dataset to a string
-Description:
-Input:
-Output:
-.SH SYNOPSIS
-.Ss
-#include <util/neo_hdf.h>
-.Se
-.Ss
-NEOERR* hdf_write_string (HDF *hdf, char **s);
-
-.Se
-
-.SH "SEE ALSO"
-.BR hdf_set_symlink "(3), "hdf_get_valuef "(3), "compareFunc) "(3), "hdf_dump_str "(3), "hdf_get_int_value "(3), "hdf_read_string_ignore "(3), "hdf_copy "(3), "hdf_get_node "(3), "hdf_set_value "(3), "hdf_obj_child "(3), "hdf_read_string "(3), "hdf_set_buf "(3), "hdf_register_fileload "(3), "hdf_get_obj "(3), "hdf_get_attr "(3), "hdf_obj_top "(3), "hdf_dump_format "(3), "hdf_destroy "(3), "hdf_init "(3), "hdf_obj_value "(3), "hdf_write_string "(3), "hdf_set_valuevf "(3), "hdf_sort_obj "(3), "hdf_write_file_atomic "(3), "hdf_obj_attr "(3), "hdf_set_valuef "(3), "hdf_get_copy "(3), "hdf_write_file "(3), "hdf_get_valuevf "(3), "hdf_set_int_value "(3), "hdf_dump "(3), "hdf_get_value "(3), "hdf_set_copy "(3), "hdf_obj_next "(3), "hdf_search_path "(3), "hdf_obj_name "(3), "hdf_set_attr "(3), "hdf_get_child "(3), "hdf_remove_tree
diff --git a/man/man3/mCreate.3 b/man/man3/mCreate.3
deleted file mode 100644
index a264c6d..0000000
--- a/man/man3/mCreate.3
+++ /dev/null
@@ -1,36 +0,0 @@
-.TH mCreate 3 "12 July 2007" "ClearSilver" "util/ulocks.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-mCreate - initialize a mutex.
-.SH SYNOPSIS
-.Ss
-#include <util/ulocks.h>
-.Se
-.Ss
-NEOERR *mCreate(pthread_mutex_t *mutex);
-
-.Se
-
-.SH ARGUMENTS
-mutex - mutex to initialize.
-
-.SH DESCRIPTION
-Initializes the mutex <mutex>.
-
-MT-Level: Safe for unique <mutex>.
-
-.SH "RETURN VALUE"
-None.
-
-.SH "SEE ALSO"
-.BR mCreate "(3), "fCreate "(3), "mUnlock "(3), "fUnlock "(3), "cBroadcast "(3), "cSignal "(3), "fFind "(3), "cDestroy "(3), "cCreate "(3), "mDestroy "(3), "cWait "(3), "fLock "(3), "fDestroy "(3), "mLock
diff --git a/man/man3/mDestroy.3 b/man/man3/mDestroy.3
deleted file mode 100644
index 987187b..0000000
--- a/man/man3/mDestroy.3
+++ /dev/null
@@ -1,36 +0,0 @@
-.TH mDestroy 3 "12 July 2007" "ClearSilver" "util/ulocks.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-mDestroy - destroy a mutex.
-.SH SYNOPSIS
-.Ss
-#include <util/ulocks.h>
-.Se
-.Ss
-void mDestroy(pthread_mutex_t *mutex);
-
-.Se
-
-.SH ARGUMENTS
-mutex - mutex to destroy.
-
-.SH DESCRIPTION
-Destroys the mutex <mutex> that was initialized by mCreate().
-
-MT-Level: Safe for unique <mutex>.
-
-.SH "RETURN VALUE"
-None.
-
-.SH "SEE ALSO"
-.BR mCreate "(3), "fCreate "(3), "mUnlock "(3), "fUnlock "(3), "cBroadcast "(3), "cSignal "(3), "fFind "(3), "cDestroy "(3), "cCreate "(3), "mDestroy "(3), "cWait "(3), "fLock "(3), "fDestroy "(3), "mLock
diff --git a/man/man3/mLock.3 b/man/man3/mLock.3
deleted file mode 100644
index a5c75fd..0000000
--- a/man/man3/mLock.3
+++ /dev/null
@@ -1,37 +0,0 @@
-.TH mLock 3 "12 July 2007" "ClearSilver" "util/ulocks.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-mLock - lock a mutex.
-.SH SYNOPSIS
-.Ss
-#include <util/ulocks.h>
-.Se
-.Ss
-NEOERR *mLock(pthread_mutex_t *mutex);
-
-.Se
-
-.SH ARGUMENTS
-mutex - mutex to lock.
-
-.SH DESCRIPTION
-Locks the mutex <mutex>. This call blocks until the mutex
-is acquired.
-
-MT-Level: Safe.
-
-.SH "RETURN VALUE"
-None.
-
-.SH "SEE ALSO"
-.BR mCreate "(3), "fCreate "(3), "mUnlock "(3), "fUnlock "(3), "cBroadcast "(3), "cSignal "(3), "fFind "(3), "cDestroy "(3), "cCreate "(3), "mDestroy "(3), "cWait "(3), "fLock "(3), "fDestroy "(3), "mLock
diff --git a/man/man3/mUnlock.3 b/man/man3/mUnlock.3
deleted file mode 100644
index e0abe58..0000000
--- a/man/man3/mUnlock.3
+++ /dev/null
@@ -1,36 +0,0 @@
-.TH mUnlock 3 "12 July 2007" "ClearSilver" "util/ulocks.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-mUnlock - unlock a mutex.
-.SH SYNOPSIS
-.Ss
-#include <util/ulocks.h>
-.Se
-.Ss
-NEOERR *mUnlock(pthread_mutex_t *mutex);
-
-.Se
-
-.SH ARGUMENTS
-mutex - mutex to unlock.
-
-.SH DESCRIPTION
-Unlocks the mutex <mutex>.
-
-MT-Level: Safe.
-
-.SH "RETURN VALUE"
-None.
-
-.SH "SEE ALSO"
-.BR mCreate "(3), "fCreate "(3), "mUnlock "(3), "fUnlock "(3), "cBroadcast "(3), "cSignal "(3), "fFind "(3), "cDestroy "(3), "cCreate "(3), "mDestroy "(3), "cWait "(3), "fLock "(3), "fDestroy "(3), "mLock
diff --git a/man/man3/nerr_error_string.3 b/man/man3/nerr_error_string.3
deleted file mode 100644
index 052ab7c..0000000
--- a/man/man3/nerr_error_string.3
+++ /dev/null
@@ -1,34 +0,0 @@
-.TH nerr_error_string 3 "12 July 2007" "ClearSilver" "util/neo_err.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-nerr_error_string
-.SH SYNOPSIS
-.Ss
-#include <util/neo_err.h>
-.Se
-.Ss
-void nerr_error_string (NEOERR *err, STRING *str);
-
-.Se
-
-.SH ARGUMENTS
-err - error
-.br
-str - string to which the data is appended
-
-.SH DESCRIPTION
-returns the string associated with an error (the bottom
-level of the error chain)
-
-.SH "SEE ALSO"
-.BR nerr_error_traceback "(3), "nerr_pass "(3), "nerr_error_string "(3), "defined "(3), "nerr_pass_ctx "(3), "nerr_passf "(3), "nerr_init "(3), "nerr_match "(3), "nerr_log_error "(3), "nerr_ignore "(3), "nerr_register "(3), "nerr_handle
diff --git a/man/man3/nerr_error_traceback.3 b/man/man3/nerr_error_traceback.3
deleted file mode 100644
index 3e24927..0000000
--- a/man/man3/nerr_error_traceback.3
+++ /dev/null
@@ -1,33 +0,0 @@
-.TH nerr_error_traceback 3 "12 July 2007" "ClearSilver" "util/neo_err.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-nerr_error_traceback
-.SH SYNOPSIS
-.Ss
-#include <util/neo_err.h>
-.Se
-.Ss
-void nerr_error_traceback (NEOERR *err, STRING *str);
-
-.Se
-
-.SH ARGUMENTS
-err - error
-.br
-str - string to which the data is appended
-
-.SH DESCRIPTION
-returns the full traceback of the error chain
-
-.SH "SEE ALSO"
-.BR nerr_error_traceback "(3), "nerr_pass "(3), "nerr_error_string "(3), "defined "(3), "nerr_pass_ctx "(3), "nerr_passf "(3), "nerr_init "(3), "nerr_match "(3), "nerr_log_error "(3), "nerr_ignore "(3), "nerr_register "(3), "nerr_handle
diff --git a/man/man3/nerr_handle.3 b/man/man3/nerr_handle.3
deleted file mode 100644
index bde7322..0000000
--- a/man/man3/nerr_handle.3
+++ /dev/null
@@ -1,35 +0,0 @@
-.TH nerr_handle 3 "12 July 2007" "ClearSilver" "util/neo_err.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-nerr_handle
-.SH SYNOPSIS
-.Ss
-#include <util/neo_err.h>
-.Se
-.Ss
-int nerr_handle (NEOERR **err, NERR_TYPE type);
-
-.Se
-
-.SH ARGUMENTS
-err - pointer to a pointer NEOERR
-.br
-type - the NEOERR type, as registered with nerr_register
-
-.SH DESCRIPTION
-nerr_handle is a convenience function. It is the equivalent
-of nerr_match, but it will also deallocate the error chain
-on a match.
-
-.SH "SEE ALSO"
-.BR nerr_error_traceback "(3), "nerr_pass "(3), "nerr_error_string "(3), "defined "(3), "nerr_pass_ctx "(3), "nerr_passf "(3), "nerr_init "(3), "nerr_match "(3), "nerr_log_error "(3), "nerr_ignore "(3), "nerr_register "(3), "nerr_handle
diff --git a/man/man3/nerr_ignore.3 b/man/man3/nerr_ignore.3
deleted file mode 100644
index 4f40bf1..0000000
--- a/man/man3/nerr_ignore.3
+++ /dev/null
@@ -1,29 +0,0 @@
-.TH nerr_ignore 3 "12 July 2007" "ClearSilver" "util/neo_err.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-nerr_ignore
-.SH SYNOPSIS
-.Ss
-#include <util/neo_err.h>
-.Se
-.Ss
-void nerr_ignore (NEOERR **err);
-
-.Se
-
-.SH DESCRIPTION
-you should only call this if you actually handle the
-error (should I rename it?). Free's the error chain.
-
-.SH "SEE ALSO"
-.BR nerr_error_traceback "(3), "nerr_pass "(3), "nerr_error_string "(3), "defined "(3), "nerr_pass_ctx "(3), "nerr_passf "(3), "nerr_init "(3), "nerr_match "(3), "nerr_log_error "(3), "nerr_ignore "(3), "nerr_register "(3), "nerr_handle
diff --git a/man/man3/nerr_init.3 b/man/man3/nerr_init.3
deleted file mode 100644
index 9b4018e..0000000
--- a/man/man3/nerr_init.3
+++ /dev/null
@@ -1,34 +0,0 @@
-.TH nerr_init 3 "12 July 2007" "ClearSilver" "util/neo_err.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-nerr_init
-.SH SYNOPSIS
-.Ss
-#include <util/neo_err.h>
-.Se
-.Ss
-NEOERR *nerr_init (void);
-
-.Se
-
-.SH ARGUMENTS
-None
-
-.SH DESCRIPTION
-initialize the NEOERR system. Can be called more than once.
-Is not thread safe. This registers all of the built in
-error types as defined at the top of this file. If you don't
-call this, all exceptions will be returned as UnknownError.
-
-.SH "SEE ALSO"
-.BR nerr_error_traceback "(3), "nerr_pass "(3), "nerr_error_string "(3), "defined "(3), "nerr_pass_ctx "(3), "nerr_passf "(3), "nerr_init "(3), "nerr_match "(3), "nerr_log_error "(3), "nerr_ignore "(3), "nerr_register "(3), "nerr_handle
diff --git a/man/man3/nerr_log_error.3 b/man/man3/nerr_log_error.3
deleted file mode 100644
index 3193291..0000000
--- a/man/man3/nerr_log_error.3
+++ /dev/null
@@ -1,29 +0,0 @@
-.TH nerr_log_error 3 "12 July 2007" "ClearSilver" "util/neo_err.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-nerr_log_error
-.SH SYNOPSIS
-.Ss
-#include <util/neo_err.h>
-.Se
-.Ss
-void nerr_log_error (NEOERR *err);
-
-.Se
-
-.SH DESCRIPTION
-currently, this prints out the error to stderr, and
-free's the error chain
-
-.SH "SEE ALSO"
-.BR nerr_error_traceback "(3), "nerr_pass "(3), "nerr_error_string "(3), "defined "(3), "nerr_pass_ctx "(3), "nerr_passf "(3), "nerr_init "(3), "nerr_match "(3), "nerr_log_error "(3), "nerr_ignore "(3), "nerr_register "(3), "nerr_handle
diff --git a/man/man3/nerr_match.3 b/man/man3/nerr_match.3
deleted file mode 100644
index a34e814..0000000
--- a/man/man3/nerr_match.3
+++ /dev/null
@@ -1,37 +0,0 @@
-.TH nerr_match 3 "12 July 2007" "ClearSilver" "util/neo_err.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-nerr_match
-.SH SYNOPSIS
-.Ss
-#include <util/neo_err.h>
-.Se
-.Ss
-int nerr_match (NEOERR *err, NERR_TYPE type);
-
-.Se
-
-.SH ARGUMENTS
-err - the NEOERR that has an error.
-.br
-type - the NEOERR type, as registered with nerr_register
-
-.SH DESCRIPTION
-nerr_match is used to walk the NEOERR chain and match
-the error against a specific error type. In exception
-parlance, this would be the equivalent of "catch".
-Typically, you can just compare a NEOERR against STATUS_OK
-or just test for true if you are checking for any error.
-
-.SH "SEE ALSO"
-.BR nerr_error_traceback "(3), "nerr_pass "(3), "nerr_error_string "(3), "defined "(3), "nerr_pass_ctx "(3), "nerr_passf "(3), "nerr_init "(3), "nerr_match "(3), "nerr_log_error "(3), "nerr_ignore "(3), "nerr_register "(3), "nerr_handle
diff --git a/man/man3/nerr_pass.3 b/man/man3/nerr_pass.3
deleted file mode 100644
index 2c31482..0000000
--- a/man/man3/nerr_pass.3
+++ /dev/null
@@ -1,35 +0,0 @@
-.TH nerr_pass 3 "12 July 2007" "ClearSilver" "util/neo_err.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-nerr_pass
-.SH SYNOPSIS
-.Ss
-#include <util/neo_err.h>
-.Se
-.Ss
-nerr_pass()
-.Se
-
-.SH ARGUMENTS
-with the macro, the function name, file and lineno are
-.br
-automagically recorded. Just pass the error.
-
-.SH DESCRIPTION
-this function is used to pass an error up a level in the
-call chain (ie, if the error isn't handled at the
-current level). This allows us to track the traceback
-of the error.
-
-.SH "SEE ALSO"
-.BR nerr_error_traceback "(3), "nerr_pass "(3), "nerr_error_string "(3), "defined "(3), "nerr_pass_ctx "(3), "nerr_passf "(3), "nerr_init "(3), "nerr_match "(3), "nerr_log_error "(3), "nerr_ignore "(3), "nerr_register "(3), "nerr_handle
diff --git a/man/man3/nerr_pass_ctx.3 b/man/man3/nerr_pass_ctx.3
deleted file mode 100644
index e669d93..0000000
--- a/man/man3/nerr_pass_ctx.3
+++ /dev/null
@@ -1,41 +0,0 @@
-.TH nerr_pass_ctx 3 "12 July 2007" "ClearSilver" "util/neo_err.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-nerr_pass_ctx
-.SH SYNOPSIS
-.Ss
-#include <util/neo_err.h>
-.Se
-.Ss
-nerr_pass_ctx()
-.Se
-
-.SH ARGUMENTS
-with the macro, the function name, file and lineno are
-.br
-automagically recorded. Just pass the error and
-.br
-a printf format string giving more information about where
-.br
-the error is occuring.
-
-.SH DESCRIPTION
-this function is used to pass an error up a level in the
-call chain (ie, if the error isn't handled at the
-current level). This allows us to track the traceback
-of the error.
-This version includes context information about lower
-errors
-
-.SH "SEE ALSO"
-.BR nerr_error_traceback "(3), "nerr_pass "(3), "nerr_error_string "(3), "defined "(3), "nerr_pass_ctx "(3), "nerr_passf "(3), "nerr_init "(3), "nerr_match "(3), "nerr_log_error "(3), "nerr_ignore "(3), "nerr_register "(3), "nerr_handle
diff --git a/man/man3/nerr_raise.3 b/man/man3/nerr_raise.3
deleted file mode 100644
index 92f3ce2..0000000
--- a/man/man3/nerr_raise.3
+++ /dev/null
@@ -1,39 +0,0 @@
-.TH nerr_raise 3 "14 December 2005" "ClearSilver" "util/neo_err.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-nerr_raise
-.SH SYNOPSIS
-.Ss
-#include <util/neo_err.h>
-.Se
-.Ss
-nerr_raise()
-.Se
-
-.SH ARGUMENTS
-using the macro, the function name, file, and lineno are
-.br
-automagically recorded for you. You just provide the
-.br
-error (from those listed above) and the printf-style
-.br
-reason. THIS IS A PRINTF STYLE FUNCTION, DO NOT PASS
-.br
-UNKNOWN STRING DATA AS THE FORMAT STRING.
-
-.SH DESCRIPTION
-Use this method to create an error "exception" for
-return up the call chain
-
-.SH "SEE ALSO"
-.BR nerr_error_traceback "(3), "nerr_pass "(3), "nerr_passf "(3), "nerr_raise_errnof "(3), "nerr_log_error "(3), "nerr_pass_ctx "(3), "nerr_raisef "(3), "nerr_init "(3), "nerr_match "(3), "nerr_error_string "(3), "nerr_ignore "(3), "nerr_register "(3), "nerr_raise "(3), "nerr_handle "(3), "nerr_pass_ctxf
diff --git a/man/man3/nerr_register.3 b/man/man3/nerr_register.3
deleted file mode 100644
index 8a66e4f..0000000
--- a/man/man3/nerr_register.3
+++ /dev/null
@@ -1,34 +0,0 @@
-.TH nerr_register 3 "12 July 2007" "ClearSilver" "util/neo_err.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-nerr_register
-.SH SYNOPSIS
-.Ss
-#include <util/neo_err.h>
-.Se
-.Ss
-NEOERR *nerr_register (NERR_TYPE *err, const char *name);
-
-.Se
-
-.SH ARGUMENTS
-err - pointer to a NERR_TYPE
-.br
-name - pretty name for the error type
-
-.SH DESCRIPTION
-register an error type. This will assign a numeric value
-to the type, and keep track of the "pretty name" for it.
-
-.SH "SEE ALSO"
-.BR nerr_error_traceback "(3), "nerr_pass "(3), "nerr_error_string "(3), "defined "(3), "nerr_pass_ctx "(3), "nerr_passf "(3), "nerr_init "(3), "nerr_match "(3), "nerr_log_error "(3), "nerr_ignore "(3), "nerr_register "(3), "nerr_handle
diff --git a/man/man3/skipDelete.3 b/man/man3/skipDelete.3
deleted file mode 100644
index 9844062..0000000
--- a/man/man3/skipDelete.3
+++ /dev/null
@@ -1,38 +0,0 @@
-.TH skipDelete 3 "12 July 2007" "ClearSilver" "util/skiplist.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-skipDelete - delete an item.
-.SH SYNOPSIS
-.Ss
-#include <util/skiplist.h>
-.Se
-.Ss
-void skipDelete(skipList list, UINT32 key);
-
-.Se
-
-.SH ARGUMENTS
-list - list to delete item from.
-.br
-key - key identifying value to delete.
-
-.SH DESCRIPTION
-Delete the item associated with <key> from <list>.
-
-MT-Level: Safe if <list> thread-safe.
-
-.SH "RETURN VALUE"
-None.
-
-.SH "SEE ALSO"
-.BR skipDelete "(3), "skipFreeList "(3), "skipRelease "(3), "skipInsert "(3), "skipSearch "(3), "skipNext "(3), "skipNewList
diff --git a/man/man3/skipFreeList.3 b/man/man3/skipFreeList.3
deleted file mode 100644
index 9af5fb8..0000000
--- a/man/man3/skipFreeList.3
+++ /dev/null
@@ -1,37 +0,0 @@
-.TH skipFreeList 3 "12 July 2007" "ClearSilver" "util/skiplist.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-skipFreeList - free a skip list.
-.SH SYNOPSIS
-.Ss
-#include <util/skiplist.h>
-.Se
-.Ss
-void skipFreeList(skipList list);
-
-.Se
-
-.SH ARGUMENTS
-list - list to free.
-
-.SH DESCRIPTION
-Release all resources used by <list> including all key/value
-pairs.
-
-MT-Level: Safe for unique <list>.
-
-.SH "RETURN VALUE"
-None.
-
-.SH "SEE ALSO"
-.BR skipDelete "(3), "skipFreeList "(3), "skipRelease "(3), "skipInsert "(3), "skipSearch "(3), "skipNext "(3), "skipNewList
diff --git a/man/man3/skipInsert.3 b/man/man3/skipInsert.3
deleted file mode 100644
index c8c27f1..0000000
--- a/man/man3/skipInsert.3
+++ /dev/null
@@ -1,43 +0,0 @@
-.TH skipInsert 3 "12 July 2007" "ClearSilver" "util/skiplist.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-skipInsert - insert an item.
-.SH SYNOPSIS
-.Ss
-#include <util/skiplist.h>
-.Se
-.Ss
-NEOERR *skipInsert(skipList list, UINT32 key, void *value, int allowUpdate);
-
-.Se
-
-.SH ARGUMENTS
-list - list to add pair to.
-.br
-key - key identifying <value>.
-.br
-value - value to store (may NOT be NULL)
-
-.SH DESCRIPTION
-Inserts the <key>/<value> pair into the <list>.
-Key values 0 and -1 are reserved (and illegal).
-If key is already in list, and <allowUpdate> is true,
-value is updated, otherwise SKIPERR_EXISTS is returned.
-
-MT-Level: Safe if <list> thread-safe.
-
-.SH "RETURN VALUE"
-None.
-
-.SH "SEE ALSO"
-.BR skipDelete "(3), "skipFreeList "(3), "skipRelease "(3), "skipInsert "(3), "skipSearch "(3), "skipNext "(3), "skipNewList
diff --git a/man/man3/skipNewList.3 b/man/man3/skipNewList.3
deleted file mode 100644
index cd02df0..0000000
--- a/man/man3/skipNewList.3
+++ /dev/null
@@ -1,56 +0,0 @@
-.TH skipNewList 3 "12 July 2007" "ClearSilver" "util/skiplist.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-skipNewList - create a skip list.
-.SH SYNOPSIS
-.Ss
-#include <util/skiplist.h>
-.Se
-.Ss
-NEOERR *skipNewList(skipList *skip, int threaded, int root, int maxLevel,
- int flushLimit, skipFreeValue freeValue, void *ctx);
-
-.Se
-
-.SH ARGUMENTS
-threaded - true if list should be thread-safe.
-.br
-root - performance parameter (see above).
-.br
-maxLevel - performance parameter (see above).
-.br
-flushLimit - max deleted items to keep cached before
-.br
-forcing a flush.
-.br
-freeValue - callback made whenever a value is flushed.
-.br
-ctx - context to pass to <freeValue>.
-
-.SH DESCRIPTION
-Returns a new skip list. If <threaded> is true, list is
-multi-thread safe. <root> and <maxLevel> determine
-performance and expected size (see discussion above).
-<flushLimit> is for threaded lists and determines the
-maximum number of deleted items to keep cached during
-concurrent searches. Once the limit is reached, new
-concurrent reads are blocked until all deleted items are
-flushed.
-
-MT-Level: Safe.
-
-.SH "RETURN VALUE"
-None.
-
-.SH "SEE ALSO"
-.BR skipDelete "(3), "skipFreeList "(3), "skipRelease "(3), "skipInsert "(3), "skipSearch "(3), "skipNext "(3), "skipNewList
diff --git a/man/man3/skipNext.3 b/man/man3/skipNext.3
deleted file mode 100644
index 5288a91..0000000
--- a/man/man3/skipNext.3
+++ /dev/null
@@ -1,48 +0,0 @@
-.TH skipNext 3 "12 July 2007" "ClearSilver" "util/skiplist.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-skipNext - find next item.
-.SH SYNOPSIS
-.Ss
-#include <util/skiplist.h>
-.Se
-.Ss
-void *skipNext(skipList list, UINT32 *pkey, void **plock);
-
-.Se
-
-.SH ARGUMENTS
-list - list to search in.
-.br
-pkey - pointer to previous key (0 to start).
-.br
-plock - place for value lock (or NULL).
-
-.SH DESCRIPTION
-Searches in list <list> for item with key next larger
-that the one in <pkey>, and returns its value if
-found, or NULL if not. If <plock> is non-NULL, then
-the lock returned in <plock> will be associated with
-the returned value. Until this lock is passed to
-skipRelease(), the value will not be freed with the
-freeValue callback (see skipNewList()).
-
-MT-Level: Safe if <list> thread-safe.
-
-.SH "RETURN VALUE"
-pkey - set to new key.
-.br
-plock - set to value lock.
-
-.SH "SEE ALSO"
-.BR skipDelete "(3), "skipFreeList "(3), "skipRelease "(3), "skipInsert "(3), "skipSearch "(3), "skipNext "(3), "skipNewList
diff --git a/man/man3/skipRelease.3 b/man/man3/skipRelease.3
deleted file mode 100644
index d4705c8..0000000
--- a/man/man3/skipRelease.3
+++ /dev/null
@@ -1,40 +0,0 @@
-.TH skipRelease 3 "12 July 2007" "ClearSilver" "util/skiplist.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-skipRelease - release lock on value.
-.SH SYNOPSIS
-.Ss
-#include <util/skiplist.h>
-.Se
-.Ss
-void skipRelease(skipList list, void *lock);
-
-.Se
-
-.SH ARGUMENTS
-list - list containing value to release.
-.br
-lock - lock to release.
-
-.SH DESCRIPTION
-Releases the lock on the value associated with <lock>. Once
-the lock is released, the freeValue callback can be called
-and the item freed (see skipNewList()).
-
-MT-Level: Safe if <list> thread-safe.
-
-.SH "RETURN VALUE"
-None.
-
-.SH "SEE ALSO"
-.BR skipDelete "(3), "skipFreeList "(3), "skipRelease "(3), "skipInsert "(3), "skipSearch "(3), "skipNext "(3), "skipNewList
diff --git a/man/man3/skipSearch.3 b/man/man3/skipSearch.3
deleted file mode 100644
index d6515f6..0000000
--- a/man/man3/skipSearch.3
+++ /dev/null
@@ -1,45 +0,0 @@
-.TH skipSearch 3 "12 July 2007" "ClearSilver" "util/skiplist.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-skipSearch - search a skip list.
-.SH SYNOPSIS
-.Ss
-#include <util/skiplist.h>
-.Se
-.Ss
-void *skipSearch(skipList list, UINT32 key, void **plock);
-
-.Se
-
-.SH ARGUMENTS
-list - list to search in.
-.br
-key - key to look for.
-.br
-plock - place for value lock (or NULL).
-
-.SH DESCRIPTION
-Searches for <key> in <list>, and returns value if
-found, or NULL if not. If <plock> is non-NULL, then
-the lock returned in <plock> will be associated with
-the returned value. Until this lock is passed to
-skipRelease(), the value will not be freed with the
-freeValue callback (see skipNewList()).
-
-MT-Level: Safe if <list> thread-safe.
-
-.SH "RETURN VALUE"
-plock - set to value lock.
-
-.SH "SEE ALSO"
-.BR skipDelete "(3), "skipFreeList "(3), "skipRelease "(3), "skipInsert "(3), "skipSearch "(3), "skipNext "(3), "skipNewList
diff --git a/man/man3/wdb_keys.3 b/man/man3/wdb_keys.3
deleted file mode 100644
index ec7273d..0000000
--- a/man/man3/wdb_keys.3
+++ /dev/null
@@ -1,41 +0,0 @@
-.TH wdb_keys 3 "12 July 2007" "ClearSilver" "util/wdb.h"
-
-.de Ss
-.sp
-.ft CW
-.nf
-..
-.de Se
-.fi
-.ft P
-.sp
-..
-.SH NAME
-wdb_keys
-.SH SYNOPSIS
-.Ss
-#include <util/wdb.h>
-.Se
-.Ss
-NEOERR * wdb_keys (WDB *wdb, char **primary_key, ULIST **data);
-
-.Se
-
-.SH ARGUMENTS
-wdb - open database
-
-.SH DESCRIPTION
-this function returns the key and column names for the
-current database
-
-.SH "RETURN VALUE"
-primary_key - pointer to the primary key
-.br
-data - pointer to a ULIST of the columns.
-.br
-both of these are allocated structures, you can clear data
-.br
-with uListDestroy (data, ULIST_FREE)
-
-.SH "SEE ALSO"
-.BR wdb_destroy "(3), "wdbr_delete "(3), "wdb_update "(3), "wdbr_dump "(3), "wdb_save "(3), "wdbr_create "(3), "wdbr_destroy "(3), "wdb_attr_set "(3), "wdb_attr_next "(3), "wdb_open "(3), "wdb_column_exchange "(3), "wdbr_set "(3), "wdb_column_insert "(3), "wdbr_save "(3), "wdbr_next "(3), "wdb_keys "(3), "wdb_column_delete "(3), "wdbc_create "(3), "wdbr_get "(3), "wdb_attr_get "(3), "wdbr_find "(3), "wdbr_lookup "(3), "wdb_create "(3), "wdbc_destroy "(3), "wdb_column_update
diff --git a/mkinstalldirs b/mkinstalldirs
deleted file mode 100755
index f4d89e9..0000000
--- a/mkinstalldirs
+++ /dev/null
@@ -1,40 +0,0 @@
-#! /bin/sh
-# mkinstalldirs --- make directory hierarchy
-# Author: Noah Friedman <friedman@prep.ai.mit.edu>
-# Created: 1993-05-16
-# Public domain
-
-# $Id: mkinstalldirs,v 1.1 2003/04/02 23:07:26 blong Exp $
-
-errstatus=0
-
-for file
-do
- set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
- shift
-
- pathcomp=
- for d
- do
- pathcomp="$pathcomp$d"
- case "$pathcomp" in
- -* ) pathcomp=./$pathcomp ;;
- esac
-
- if test ! -d "$pathcomp"; then
- echo "mkdir $pathcomp" 1>&2
-
- mkdir "$pathcomp" || lasterr=$?
-
- if test ! -d "$pathcomp"; then
- errstatus=$lasterr
- fi
- fi
-
- pathcomp="$pathcomp/"
- done
-done
-
-exit $errstatus
-
-# mkinstalldirs ends here
diff --git a/mod_ecs/Makefile b/mod_ecs/Makefile
deleted file mode 100644
index 9cd428f..0000000
--- a/mod_ecs/Makefile
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-ifeq ($(NEOTONIC_ROOT),)
-NEOTONIC_ROOT = ..
-endif
-
-include $(NEOTONIC_ROOT)/rules.mk
-
-MOD_ECS_SRC = mod_ecs.c
-MOD_ECS_SO = mod_ecs.so
-
-DLIBS += -lneo_cgi -lneo_cs -lneo_utl
-LIBS += $(DLIBS) $(DB2_LIB)
-
-TARGETS = $(MOD_ECS_SO)
-
-all: $(TARGETS)
-
-$(MOD_ECS_SO): $(MOD_ECS_SRC) $(DEP_LIBS)
- $(APXS) -c -o $@ $(MOD_ECS_SRC)
-
-install: all
- $(NEOTONIC_ROOT)/mkinstalldirs $(DESTDIR)$(libexecdir)
- $(INSTALL) $(MOD_ECS_SO) $(DESTDIR)$(libexecdir)
-
-# Hmm, install it in the default apache place, or in with the
-# rest of our stuff?
-# $(APXS) -i $(MOD_ECS_SO)
-
-clean:
- $(RM) *.o
-
-distclean:
- $(RM) Makefile.depends $(TARGETS) *.o
diff --git a/mod_ecs/Makefile.tmpl b/mod_ecs/Makefile.tmpl
deleted file mode 100644
index cf7863d..0000000
--- a/mod_ecs/Makefile.tmpl
+++ /dev/null
@@ -1 +0,0 @@
-# Makefile for mod_ecs
diff --git a/mod_ecs/README b/mod_ecs/README
deleted file mode 100644
index 13794a5..0000000
--- a/mod_ecs/README
+++ /dev/null
@@ -1,83 +0,0 @@
-mod_ecs - Apache Embedded ClearSilver CGI Module
--------------------------------------------------------
-mod_ecs is based on a heavily modified version of mod_ecgi from:
-http://www.webthing.com/software/mod_ecgi.html
-
-This directory contains an Apache module which is designed to work with
-the ClearSilver CGI Kit. The point of this Apache module is
-performance, if your server is under sufficient load that the overhead
-of forking and execing the CGI for every request is too much, this
-module is for you. This module is also useful if you want some of the
-benefits of having a long-lived program: ie, the CGI can maintain
-connections to data sources such as databases or cache data in memory.
-The chief disadvantage is the same thing: your CGI becomes a long lived
-process, and you have to watch that you don't hold connections or memory
-that you don't want to. You might want to look into the Apache
-configuration directives for limiting the number of connections that
-each child process handles: MaxRequestsPerChild.
-
-If you are already using the full ClearSilver CGI Kit, all you need to
-do to compile for the embedded ClearSilver is compile to a shared
-library instead of to an executable. For instance, under Linux:
-
- Executable: ld -o static.cgi -lneo_cgi -lneo_cs -lneo_util
- Shared Library: ld -shared -fPic -o static.cso -lneo_cgi -lneo_cs -lneo_util
-
-Also, remember not to call exit(), as this will cause the entire Apache
-child to exit.
-
-There are two extra functions you can have in your CGI that the embedded
-ClearSilver module will try to find and call if they exist. They are:
-void ECSInit(void);
-and
-void ECSCleanup(void);
-
-The first is called when the embedded CGI is loaded, the second before
-the embedded CGI is unloaded.
-
-This module supports the following three Apache configuration
-directives:
-ECSReload <yes/no>
- When yes, mod_ecs will stat the .cso every time its run, to see if the
- file on disk has been updated. If it has been updated, it will reload
- the shared file from disk. This incurs some performance overhead, and
- when a change does occur, it removes most of the gains of ECSPreload.
- Notice also that on many operating systems, changing a shared library
- on disk that has been demand loaded can cause problems such as unexpected
- core dumps. This setting is most useful for development environments where
- speed/throughput requirements aren't as high, but constant change is a
- factor.
-ECSDepLib <path>
- Brings the benefits of ECSPreload to dependent shared libraries. Will
- cause mod_ecs to dlopen() the library at apache initialization time.
- This can be avoided by using ECSPreload and having an ECSInit()
- function in your library which does the shared library initialization.
-ECSPreload <path>
- This function can be used to preload any shared libraries that you might
- be calling later. This allows you to hide the latency of load/init time
- from your users by doing it once at apache initialization.
-
-Requirements:
- A later version of Apache 1.3.x, probably 1.3.12+.
-
-To Compile:
-To dynamically load this module (assuming your copy of Apache is
-compiled to use mod_so), do:
-
- /path/to/apxs -c mod_ecs.c
-
-Optionally, to (semi-)automatically install the module, do:
- /path/to/apxs -i -a -n ecs mod_ecs.so
-
-Or, you can just edit your httpd.conf file yourself, adding the
-following lines:
- LoadModule ecs_module /path/to/installed/mod_ecs.so
- # This line needs to be after and ClearModuleList command
- AddModule mod_ecs.c
-
-There are two ways to tell Apache that a file is an embedded ClearSilver
-CGI shared library, both are by extension. Typically, we use the .cso
-extension. You can either use AddHandler or AddType:
- AddHandler ecs-cgi .cso
- AddType application/x-ecs-cgi
-
diff --git a/mod_ecs/mod_ecs.c b/mod_ecs/mod_ecs.c
deleted file mode 100644
index 4558820..0000000
--- a/mod_ecs/mod_ecs.c
+++ /dev/null
@@ -1,832 +0,0 @@
-/*
-mod_ecs - Embedded ClearSilver CGI Apache Module
-
-mod_ecs is a heavily modified version of mod_ecgi from:
-http://www.webthing.com/software/mod_ecgi.html
-
-This version is designed to run with the ClearSilver CGIKit, specifically
-with the cgi_wrap calls from that kit. Those calls wrap the standard CGI
-access methods, namely environment variables and stdin/stdout, allowing
-those calls to be replaced easily. mod_ecs provides replacement calls which
-interface directly with the Apache internals.
-
-Additionally, mod_ecs is designed to dlopen() the shared library CGI once,
-and keep it in memory, making the CGI almost identical in performance to a
-regular Apache module. The fact that your CGI will be called multiple times
-is the biggest difference you can expect from a standard ClearSilver based CGI.
-This means your code must be clean!
-
-ECS - Embedded ClearSilver
-
-Platform: UNIX only. Anyone who wants to is welcome to port it elsewhere.
-
-=======================================================
-To COMPILE Apache with embedded CGI support, use
- -ldl in EXTRA_LIBS
- possibly -rdynamic in EXTRA_LFLAGS
- I took this out of the config because its not there on freebsd4
- = ConfigStart
- LIBS="$LIBS -ldl"
- = ConfigEnd
-(or as required by your platform)
-
-OK, here's for APACI:
- * MODULE-DEFINITION-START
- * Name: ecs_module
- * MODULE-DEFINITION-END
-
-=======================================================
-
-=======================================================
-BUGS
-Lots - here are some obvious ones
- - won't work with NPH
- - No mechanism is provided for running from an SSI
- - Can't take part in content-negotiation
- - No graceful cleanup if a CGI program crashes (though it's OK
- if the CGI fails but returns).
- - Suspected memory leak inherited from Apache (which ignores it
- because it happens just before exit there).
-
-*/
-
-#include <dlfcn.h>
-#include "mod_ecs.h"
-
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-#include "http_core.h"
-#include "http_protocol.h"
-#include "http_main.h"
-#include "http_log.h"
-#include "util_script.h"
-#include "http_conf_globals.h"
-
-module ecs_module;
-
-/* Configuration stuff */
-
-#define log_reason(reason,name,r) ap_log_error(APLOG_MARK,APLOG_ERR,(r)->server,(reason),(name))
-#define log_scripterror(r,conf,ret,error) (log_reason((error),(r)->filename,(r)),ret)
-
-char** ecs_create_argv(pool*,char*,char*,char*,char*,const char*);
-
-/****************************************************************
- *
- * Actual CGI handling...
- */
-const int ERROR = 500;
-const int INTERNAL_REDIRECT = 3020;
-
-#undef ECS_DEBUG
-
-/******************************************************************
- * cgiwrap routines
- * We've replaced all the normal CGI api calls with calls to the
- * appropriate cgiwrap routines instead. Then, we provide versions of
- * the cgiwrap callback here that interface directly with apache. We
- * need to mimic a bunch of the stuff that apache does in mod_cgi in
- * order to implement the output portion of the CGI spec.
- */
-typedef struct header_buf {
- char *buf;
- int len;
- int max;
- int loc;
- int nonl;
-} HEADER_BUF;
-
-typedef struct wrap_data {
- HEADER_BUF hbuf;
- int end_of_header;
- int returns;
- request_rec *r;
-} WRAPPER_DATA;
-
-static int buf_getline (const char *idata, int ilen, char *odata, int olen, int *nonl)
-{
- char *eol;
- int len;
-
- *nonl = 1;
- eol = strchr (idata, '\n');
- if (eol == NULL)
- {
- len = ilen;
- }
- else
- {
- *nonl = 0;
- len = eol - idata + 1;
- }
- if (len > olen) len = olen;
- memcpy (odata, idata, len);
- odata[len] = '\0';
- return len;
-}
-
-static int h_getline (char *buf, int len, void *h)
-{
- HEADER_BUF *hbuf = (HEADER_BUF *)h;
- int ret;
-
- buf[0] = '\0';
- if (hbuf->loc > hbuf->len)
- return 0;
-
- ret = buf_getline (hbuf->buf + hbuf->loc, hbuf->len - hbuf->loc, buf, len, &(hbuf->nonl));
- hbuf->loc += ret;
-#if ECS_DEBUG>1
- fprintf (stderr, "h_getline: [%d] %s\n", ret, buf);
-#endif
- return ret;
-}
-
-static int header_write (HEADER_BUF *hbuf, const char *data, int dlen)
-{
- char buf[1024];
- int done, len;
- int nonl = hbuf->nonl;
-
- done = 0;
- while (done < dlen)
- {
- nonl = hbuf->nonl;
- len = buf_getline (data + done, dlen - done, buf, sizeof(buf), &(hbuf->nonl));
- if (len == 0)
- break;
- done += len;
- if (hbuf->len + len > hbuf->max)
- {
- hbuf->max *= 2;
- if (hbuf->len + len > hbuf->max)
- {
- hbuf->max += len + 1;
- }
- hbuf->buf = (char *) realloc ((void *)(hbuf->buf), hbuf->max);
- }
- memcpy (hbuf->buf + hbuf->len, buf, len);
- hbuf->len += len;
- if (!nonl && (buf[0] == '\n' || buf[0] == '\r'))
- {
- /* end of headers */
- return done;
- }
- }
-
- return 0;
-}
-
-/* The normal CGI module passes the returned data through
- * ap_scan_script_header(). We can't do that directly, since we don't
- * have a constant stream of data, so we buffer the header into our own
- * structure, and call ap_scan_script_header_err_core() with our own
- * getline() function to walk the header buffer we have. We could
- * probably get some speed improvement by keeping the header buffer
- * between runs, instead of growing it every time... for later. Also,
- * we currently don't use the pool allocation routines here, so we have
- * to be very careful not to leak. We could probably at least use the
- * ap_register_cleanup() function to make sure we clean up our mess...
- */
-static int wrap_write (void *data, const char *buf, size_t len)
-{
- WRAPPER_DATA *wrap = (WRAPPER_DATA *)data;
- int wl;
- int ret;
-
-#if ECS_DEBUG>1
- fprintf (stderr, "wrap_write (%s, %d)\n", buf, len);
-#endif
- if (!wrap->end_of_header)
- {
- wl = header_write (&(wrap->hbuf), buf, len);
- if (wl == 0)
- {
- return len;
- }
- wrap->end_of_header = 1;
- wrap->hbuf.loc = 0;
-#if ECS_DEBUG>1
- fprintf (stderr, "ap_scan_script_header_err_core\n%s\n", wrap->hbuf.buf);
-#endif
- wrap->returns = ap_scan_script_header_err_core(wrap->r, NULL, h_getline,
- (void *)&(wrap->hbuf));
-#if ECS_DEBUG>1
- fprintf (stderr, "ap_scan_script_header_err_core.. done\n");
-#endif
- if (len >= wl)
- {
- len = len - wl;
- buf = buf + wl;
- }
-
- if (wrap->returns == OK)
- {
- const char* location = ap_table_get (wrap->r->headers_out, "Location");
-
- if (location && location[0] == '/' && wrap->r->status == 200)
- {
- wrap->returns = INTERNAL_REDIRECT;
- }
- else if (location && wrap->r->status == 200)
- {
- /* XX Note that if a script wants to produce its own Redirect
- * body, it now has to explicitly *say* "Status: 302"
- */
- wrap->returns = REDIRECT;
- }
- else
- {
-#ifdef ECS_DEBUG
- fprintf (stderr, "ap_send_http_header\n");
-#endif
- ap_send_http_header(wrap->r);
-#ifdef ECS_DEBUG
- fprintf (stderr, "ap_send_http_header.. done\n");
-#endif
- }
- }
- }
- /* if header didn't return OK, ignore the rest */
- if ((wrap->returns != OK) || wrap->r->header_only)
- {
- return len;
- }
-#if ECS_DEBUG>1
- fprintf (stderr, "ap_rwrite(%s,%d)\n", buf, len);
-#endif
- ret = ap_rwrite (buf, len, wrap->r);
-#if ECS_DEBUG>1
- fprintf (stderr, "ap_rwrite.. done\n");
-#endif
- return ret;
-}
-
-int wrap_vprintf (void *data, const char *fmt, va_list ap)
-{
- char buf[4096];
- int len;
-
- len = ap_vsnprintf (buf, sizeof(buf), fmt, ap);
- return wrap_write (data, buf, len);
-}
-
-static int wrap_read (void *data, char *buf, size_t len)
-{
- WRAPPER_DATA *wrap = (WRAPPER_DATA *)data;
- int ret;
- int x = 0;
-
-#if ECS_DEBUG>1
- fprintf (stderr, "wrap_read (%s, %d)\n", buf, len);
-#endif
- do
- {
- ret = ap_get_client_block(wrap->r, buf + x, len - x);
- if (ret <= 0) break;
- x += ret;
- } while (x < len);
-#if ECS_DEBUG>1
- fprintf (stderr, "done ap_get_client_block\n");
-#endif
- if (ret < 0) return ret;
- return x;
-}
-
-static char *wrap_getenv (void *data, const char *s)
-{
- WRAPPER_DATA *wrap = (WRAPPER_DATA *)data;
- char *v;
-
- v = (char *) ap_table_get (wrap->r->subprocess_env, s);
- if (v) return strdup(v);
- return NULL;
-}
-
-static int wrap_putenv (void *data, const char *k, const char *v)
-{
- WRAPPER_DATA *wrap = (WRAPPER_DATA *)data;
-
- ap_table_set (wrap->r->subprocess_env, k, v);
-
- return 0;
-}
-
-static char *wrap_iterenv (void *data, int x, char **k, char **v)
-{
- WRAPPER_DATA *wrap = (WRAPPER_DATA *)data;
- array_header *env = ap_table_elts(wrap->r->subprocess_env);
- table_entry *entry = (table_entry*)env->elts;
-
- if (x >= env->nelts) return 0;
-
- if (entry[x].key == NULL || entry[x].val == NULL)
- return 0;
-
- *k = strdup(entry[x].key);
- *v = strdup(entry[x].val);
-
- return 0;
-}
-
-/*************************************************************************
- * Actual mod_ecs data structures for configuration
- */
-
-typedef void (*InitFunc)();
-typedef void (*CleanupFunc)();
-typedef int (*CGIMainFunc)(int,char**,char**);
-typedef int (*WrapInitFunc)(void *,void *,void*,void*,void*,void*,void*);
-
-typedef struct {
- const char *libpath;
- ap_os_dso_handle_t dlib;
-} ecs_deplibs;
-
-typedef struct {
- const char *libpath;
- ap_os_dso_handle_t dlib;
- WrapInitFunc wrap_init;
- CGIMainFunc start;
- time_t mtime;
- int loaded;
-} ecs_manager;
-
-typedef struct {
- array_header *deplibs;
- array_header *handlers;
- int fork_enabled;
- int reload_enabled;
-} ecs_server_conf;
-
-const char *ECSInit = "ECSInit";
-const char *ECSCleanUp = "ECSCleanup";
-const char *WrapInit = "cgiwrap_init_emu";
-const char *CGIMain = "main";
-
-static void dummy (ap_os_dso_handle_t dlhandle)
-{
-}
-
-static void slib_cleanup (ap_os_dso_handle_t dlhandle)
-{
- CleanupFunc cleanupFunc;
- if ((cleanupFunc = (CleanupFunc)ap_os_dso_sym(dlhandle, ECSCleanUp))) {
- (*cleanupFunc)();
- }
- ap_os_dso_unload(dlhandle);
-#ifdef ECS_DEBUG
- fprintf(stderr, "Unloading handle %d", dlhandle);
-#endif
-}
-
-void *create_ecs_config (pool *p, server_rec *dummy)
-{
- ecs_server_conf *new = ap_palloc (p, sizeof(ecs_server_conf));
- new->deplibs = ap_make_array(p,1,sizeof(ecs_deplibs));
- new->handlers = ap_make_array(p,1,sizeof(ecs_manager));
- new->fork_enabled = 0;
- new->reload_enabled = 0;
- return (void *) new;
-}
-
-char** e_setup_cgi_env (request_rec* r)
-{
- char** env;
-
- ap_add_common_vars(r);
- ap_add_cgi_vars(r);
- env = ap_create_environment(r->pool,r->subprocess_env);
-
- return env;
-}
-
-const char *set_dep_lib (cmd_parms *parms, void *dummy, char *arg)
-{
- ecs_server_conf *cls = ap_get_module_config (parms->server->module_config,
- &ecs_module);
- ecs_deplibs *entry;
- ap_os_dso_handle_t dlhandle;
- InitFunc init_func;
-
- if ((dlhandle = ap_os_dso_load(arg)) == NULL) {
- return ap_os_dso_error();
- }
-
- if ((init_func = (InitFunc)ap_os_dso_sym(dlhandle, ECSInit))) {
- (*init_func)();
- }
-
- ap_register_cleanup (cls->deplibs->pool, dlhandle, slib_cleanup, slib_cleanup);
-
- entry = (ecs_deplibs*)ap_push_array(cls->deplibs);
- entry->libpath = ap_pstrdup(cls->deplibs->pool, arg);
- entry->dlib = dlhandle;
-
- return NULL;
-}
-
-/* Load an ecs shared library */
-static const char *load_library (ap_pool *p, ecs_manager *entry, int do_stat, char *prefix)
-{
- ap_os_dso_handle_t dlhandle;
- InitFunc init_func;
- CGIMainFunc cgi_main;
- WrapInitFunc wrap_init;
- char *err;
- struct stat s;
-
- if (do_stat)
- {
- if (stat(entry->libpath, &s) == -1)
- {
- err = ap_psprintf (p, "Failed to stat library file %s: %d", entry->libpath, errno);
- return err;
- }
- entry->mtime = s.st_mtime;
- }
-
- if (entry->loaded == 1)
- {
- fprintf (stderr, "Warning: attempting to reload %s but it's already loaded\n", entry->libpath);
- }
-
- /* This does a RTLD_NOW, if we want lazy, we're going to have to do it
- * ourselves */
- if ((dlhandle = ap_os_dso_load(entry->libpath)) == NULL) {
- return ap_os_dso_error();
- }
-
- if (entry->dlib == dlhandle)
- {
- fprintf (stderr, "Warning: Reload of %s returned same handle\n", entry->libpath);
- }
-
- if ((init_func = (InitFunc)ap_os_dso_sym(dlhandle, ECSInit))) {
- (*init_func)();
- }
- if (!(wrap_init = (WrapInitFunc)ap_os_dso_sym(dlhandle, WrapInit))) {
- err = ap_psprintf (p, "Failed to find wrap init function %s in shared object: %s", WrapInit, dlerror());
- ap_os_dso_unload(dlhandle);
- return err;
- }
- if (!(cgi_main = (CGIMainFunc)ap_os_dso_sym(dlhandle, CGIMain))) {
- err = ap_psprintf (p, "Failed to find entry function %s in shared object: %s", CGIMain, dlerror());
- ap_os_dso_unload(dlhandle);
- return err;
- }
-
- /* Um, this may be a problem... */
- ap_register_cleanup (p, dlhandle, slib_cleanup, dummy);
-
- entry->dlib = dlhandle;
- entry->wrap_init = wrap_init;
- entry->start = cgi_main;
- entry->loaded = 1;
-
- fprintf (stderr, "%sLoaded library %s [%d]\n", prefix, entry->libpath, dlhandle);
-
- return NULL;
-}
-
-const char *set_pre_lib (cmd_parms *parms, void *dummy, char *arg)
-{
- ecs_server_conf *cls = ap_get_module_config (parms->server->module_config,
- &ecs_module);
- ecs_manager *entry;
-
- entry = (ecs_manager*)ap_push_array(cls->handlers);
- entry->libpath = ap_pstrdup(cls->handlers->pool, arg);
-
- return load_library (cls->handlers->pool, entry, 1, "Pre");
-}
-
-const char *set_fork (cmd_parms *parms, void *dummy, int flag)
-{
- ecs_server_conf *cls = ap_get_module_config (parms->server->module_config,
- &ecs_module);
-
- cls->fork_enabled = (flag ? 1 : 0);
-
- return NULL;
-}
-
-const char *set_reload (cmd_parms *parms, void *dummy, int flag)
-{
- ecs_server_conf *cls = ap_get_module_config (parms->server->module_config,
- &ecs_module);
-
- cls->reload_enabled = (flag ? 1 : 0);
-
- return NULL;
-}
-
-static ecs_manager *findHandler(array_header *a, char *file)
-{
- ecs_manager *list = (ecs_manager*)(a->elts);
- int i;
-
- for (i = 0; i < a->nelts; i++)
- {
- if (!strcmp(list[i].libpath, file))
- return &(list[i]);
- }
- return NULL;
-}
-
-static int run_dl_cgi (ecs_server_conf *sconf, request_rec* r, char* argv0)
-{
- int ret = 0;
- void* handle;
- int cgi_status;
- int argc;
- char** argv;
- WRAPPER_DATA *wdata;
- ecs_manager *handler;
- const char *err;
-
- char** envp = e_setup_cgi_env(r);
-
- /* Find/open library */
- handler = findHandler (sconf->handlers, r->filename);
- if (handler == NULL)
- {
- ecs_manager my_handler;
- my_handler.libpath = ap_pstrdup(sconf->handlers->pool, r->filename);
- err = load_library(sconf->handlers->pool, &my_handler, 1, "");
- if (err != NULL)
- {
- log_reason("Error opening library:", err, r);
- ret = ERROR;
- }
- else
- {
- handler = (ecs_manager*)ap_push_array(sconf->handlers);
- handler->dlib = my_handler.dlib;
- handler->wrap_init = my_handler.wrap_init;
- handler->start = my_handler.start;
- handler->mtime = my_handler.mtime;
- handler->loaded = my_handler.loaded;
- handler->libpath = my_handler.libpath;
- }
- }
- else if (sconf->reload_enabled)
- {
- struct stat s;
- if (stat(handler->libpath, &s) == -1)
- {
- log_reason("Unable to stat file: ", handler->libpath, r);
- ret = ERROR;
- }
- else if (!handler->loaded || (s.st_mtime > handler->mtime))
- {
- if (handler->loaded)
- {
- int x;
- fprintf (stderr, "Unloading %s\n", handler->libpath);
- slib_cleanup(handler->dlib);
- /* Really unload this thing */
- while ((x < 100) && (dlclose(handler->dlib) != -1)) x++;
- if (x == 100)
- fprintf (stderr, "dlclose() never returned -1");
- handler->loaded = 0;
- }
- err = load_library(sconf->handlers->pool, handler, 0, "Re");
- if (err != NULL)
- {
- log_reason("Error opening library:", err, r);
- ret = ERROR;
- }
- handler->mtime = s.st_mtime;
- }
- }
-
- if (!ret) {
- if ((!r->args) || (!r->args[0]) || (ap_ind(r->args,'=') >= 0) )
- {
- argc = 1;
- argv = &argv0;
- } else {
- argv = ecs_create_argv(r->pool, NULL,NULL,NULL,argv0,r->args);
- for (argc = 0 ; argv[argc] ; ++argc);
- }
- }
-
- /* Yow ... at last we can go ...
-
- Now, what to do if CGI crashes (aaargh)
- Methinks an atexit ... cleanup perhaps; have to figgerout
- what the atexit needs to invoke ... yuk!
-
- Or maybe better to catch SIGSEGV and SIGBUS ?
- - we don't want coredumps from someone else's bugs, do we?
- still doesn't guarantee anything very good :-(
-
- Ugh .. nothing better???
- */
- if (!ret)
- {
- wdata = (WRAPPER_DATA *) ap_pcalloc (r->pool, sizeof (WRAPPER_DATA));
- /* We use malloc here because there is no pool alloc command for
- * realloc... */
- wdata->hbuf.buf = (char *) malloc (sizeof(char) * 1024);
- wdata->hbuf.max = 1024;
- wdata->r = r;
-
-#ifdef ECS_DEBUG
- fprintf (stderr, "wrap_init()\n");
-#endif
- handler->wrap_init(wdata, wrap_read, wrap_vprintf, wrap_write, wrap_getenv, wrap_putenv, wrap_iterenv);
-
-#ifdef ECS_DEBUG
- fprintf (stderr, "cgi_main()\n");
-#endif
- cgi_status = handler->start(argc,argv,envp);
- if (cgi_status != 0)
- {
- /*log_reason("CGI returned error status", cgi_status, r) ;*/
- ret = ERROR;
- }
-
- if (wdata->returns != OK)
- ret = wdata->returns;
-
- free (wdata->hbuf.buf);
- }
-
- return ret;
-}
-
-int run_xcgi (ecs_server_conf *conf, request_rec* r, char* argv0)
-{
- int len_read;
- char argsbuffer[HUGE_STRING_LEN];
- int ret = 0;
-
- ret = run_dl_cgi (conf, r, argv0);
-
- if (ret == INTERNAL_REDIRECT)
- {
- const char* location = ap_table_get (r->headers_out, "Location");
-
- /* This redirect needs to be a GET no matter what the original
- * method was.
- */
- r->method = ap_pstrdup(r->pool, "GET");
- r->method_number = M_GET;
-
- /* We already read the message body (if any), so don't allow
- * the redirected request to think it has one. We can ignore
- * Transfer-Encoding, since we used REQUEST_CHUNKED_ERROR.
- */
- ap_table_unset(r->headers_in, "Content-Length");
-
- ap_internal_redirect_handler (location, r);
- return OK;
- }
-
- return ret;
-}
-
-int ecs_handler (request_rec* r)
-{
- int retval;
- char *argv0;
- int is_included = !strcmp (r->protocol, "INCLUDED");
- void *sconf = r->server->module_config;
- ecs_server_conf *conf =
- (ecs_server_conf *)ap_get_module_config(sconf, &ecs_module);
-
- ap_error_log2stderr(r->server);
-#ifdef ECS_DEBUG
- fprintf(stderr, "running ecs_handler %s\n", r->filename);
-#endif
-
- if((argv0 = strrchr(r->filename,'/')) != NULL)
- argv0++;
- else argv0 = r->filename;
-
- if (!(ap_allow_options (r) & OPT_EXECCGI) )
- return log_scripterror(r, conf, FORBIDDEN,
- "Options ExecCGI is off in this directory");
-
- if (S_ISDIR(r->finfo.st_mode))
- return log_scripterror(r, conf, FORBIDDEN,
- "attempt to invoke directory as script");
- if (r->finfo.st_mode == 0)
- return log_scripterror(r, conf, NOT_FOUND,
- "file not found or unable to stat");
-
-#ifdef ECS_DEBUG
- fprintf (stderr, "ap_setup_client_block\n");
-#endif
- if ((retval = ap_setup_client_block(r, REQUEST_CHUNKED_ERROR)))
- return retval;
-
-#ifdef ECS_DEBUG
- fprintf (stderr, "before run\n");
-#endif
- return run_xcgi(conf, r, argv0);
-}
-
-handler_rec ecs_handlers[] = {
- { ECS_MAGIC_TYPE, ecs_handler },
- { "ecs-cgi", ecs_handler},
- { NULL }
-};
-
-command_rec ecs_cmds[] = {
- { "ECSFork", set_fork, NULL, OR_FILEINFO, FLAG,
- "On or off to enable or disable (default) forking before calling cgi_main" },
- { "ECSReload", set_reload, NULL, OR_FILEINFO, FLAG,
- "On or off to enable or disable (default) checking if the shared library\n" \
- " has changed and reloading it if it has"},
- { "ECSDepLib", set_dep_lib, NULL, RSRC_CONF, TAKE1,
- "The location of a dependent lib to dlopen during init"},
- { "ECSPreload", set_pre_lib, NULL, RSRC_CONF, TAKE1,
- "The location of a shared lib handler to preload during init"},
- { NULL }
-};
-
-module ecs_module = {
- STANDARD_MODULE_STUFF,
- NULL, /* initializer */
- NULL, /* dir config creater */
- NULL, /* dir merger --- default is to override */
- create_ecs_config, /* server config */
- NULL, /*merge_ecs_config,*/ /* merge server config */
- ecs_cmds, /* command table */
- ecs_handlers, /* handlers */
- NULL, /* filename translation */
- NULL, /* check_user_id */
- NULL, /* check auth */
- NULL, /* check access */
- NULL, /* type_checker */
- NULL, /* fixups */
- NULL, /* logger */
-#if MODULE_MAGIC_NUMBER >= 19970103
- NULL, /* [3] header parser */
-#endif
-#if MODULE_MAGIC_NUMBER >= 19970719
- NULL, /* process initializer */
-#endif
-#if MODULE_MAGIC_NUMBER >= 19970728
- NULL, /* process exit/cleanup */
-#endif
-#if MODULE_MAGIC_NUMBER >= 19970902
- NULL, /* [1] post read_request handling */
-#endif
-};
-
-
-/* Here's some stuff that essentially duplicates util_script.c
- This really should be merged, but if _I_ do that it'll break
- modularity and leave users with a nasty versioning problem.
-
- If I get a round tuit sometime, I might ask the Apache folks
- about integrating some changes in the main source tree.
-*/
-/* If a request includes query info in the URL (stuff after "?"), and
- * the query info does not contain "=" (indicative of a FORM submission),
- * then this routine is called to create the argument list to be passed
- * to the CGI script. When suexec is enabled, the suexec path, user, and
- * group are the first three arguments to be passed; if not, all three
- * must be NULL. The query info is split into separate arguments, where
- * "+" is the separator between keyword arguments.
- */
-char **ecs_create_argv(pool *p, char *path, char *user, char *group,
- char *av0, const char *args)
-{
- int x, numwords;
- char **av;
- char *w;
- int idx = 0;
-
- /* count the number of keywords */
-
- for (x = 0, numwords = 1; args[x]; x++)
- if (args[x] == '+') ++numwords;
-
- if (numwords > APACHE_ARG_MAX - 5) {
- numwords = APACHE_ARG_MAX - 5; /* Truncate args to prevent overrun */
- }
- av = (char **)ap_palloc(p, (numwords + 5) * sizeof(char *));
-
- if (path)
- av[idx++] = path;
- if (user)
- av[idx++] = user;
- if (group)
- av[idx++] = group;
-
- av[idx++] = av0;
-
- for (x = 1; x <= numwords; x++) {
- w = ap_getword_nulls(p, &args, '+');
- ap_unescape_url(w);
- av[idx++] = ap_escape_shell_cmd(p, w);
- }
- av[idx] = NULL;
- return av;
-}
diff --git a/mod_ecs/mod_ecs.h b/mod_ecs/mod_ecs.h
deleted file mode 100644
index 7bdb838..0000000
--- a/mod_ecs/mod_ecs.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef __MOD_ECS_H_
-#define __MOD_ECS_H_ 1
-
-/* not a real .h file - just for the cgiplusplus interface */
-
-/* not an enum - want a bitfield */
-#define APACHE_CGI 0x1000
-/* need nonzero even for a default :-) */
-#define CGIPLUSPLUS 1
-#define EXTENDED_CGI 2
-#define USE_STRICT 4
-#define OPTIMISED_DESCRIPTORS 8
-#define ENV_AS_TABLE 0x10
-#define USE_CGI_STDERR 0x20
-#define STDERR_TO_HTML 0x40
-#define NPH 0x100
-#define STDIN_BUF 0x200
-#define OWN_STDOUT 0x400
-#define OWN_STDERR 0x800
-/* one day we'll get round to implementing all the above */
-
-#define ECS_MAGIC_TYPE "application/x-ecs-cgi"
-
-#endif /* __MOD_ECS_H_ */
diff --git a/perl/Changes b/perl/Changes
deleted file mode 100644
index c546080..0000000
--- a/perl/Changes
+++ /dev/null
@@ -1,10 +0,0 @@
-Revision history for Perl extension ClearSilver.
-
-0.02 Mon Sep 2
- - Added sortObj() method to HDF class.
- - Filled in README.
-
-0.01 Wed Aug 14 17:10:52 2002
- - original version; created by h2xs 1.21 with options
- -A -n ClearSilver
-
diff --git a/perl/ClearSilver.pm b/perl/ClearSilver.pm
deleted file mode 100644
index 41dd00f..0000000
--- a/perl/ClearSilver.pm
+++ /dev/null
@@ -1,68 +0,0 @@
-package ClearSilver;
-
-use 5.006;
-use strict;
-use warnings;
-
-require Exporter;
-require DynaLoader;
-
-our @ISA = qw(Exporter DynaLoader);
-
-# Items to export into callers namespace by default. Note: do not export
-# names by default without a very good reason. Use EXPORT_OK instead.
-# Do not simply export all your public functions/methods/constants.
-
-# This allows declaration use ClearSilver ':all';
-# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK
-# will save memory.
-our %EXPORT_TAGS = ( 'all' => [ qw(
-
-) ] );
-
-our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
-
-our @EXPORT = qw(
-
-);
-our $VERSION = '0.01';
-
-bootstrap ClearSilver $VERSION;
-
-# Preloaded methods go here.
-
-1;
-__END__
-# Below is stub documentation for your module. You better edit it!
-
-=head1 NAME
-
-ClearSilver - Perl extension for blah blah blah
-
-=head1 SYNOPSIS
-
- use ClearSilver;
- blah blah blah
-
-=head1 DESCRIPTION
-
-Stub documentation for ClearSilver, created by h2xs. It looks like the
-author of the extension was negligent enough to leave the stub
-unedited.
-
-Blah blah blah.
-
-=head2 EXPORT
-
-None by default.
-
-
-=head1 AUTHOR
-
-A. U. Thor, E<lt>a.u.thor@a.galaxy.far.far.awayE<gt>
-
-=head1 SEE ALSO
-
-L<perl>.
-
-=cut
diff --git a/perl/ClearSilver.xs b/perl/ClearSilver.xs
deleted file mode 100644
index 221f62f..0000000
--- a/perl/ClearSilver.xs
+++ /dev/null
@@ -1,457 +0,0 @@
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#include "ClearSilver.h"
-
-/* #define DEBUG_MODE 1
- */
-
-typedef struct {
- HDF* hdf;
- NEOERR* err;
-} perlHDF;
-
-typedef struct {
- CSPARSE* cs;
- NEOERR* err;
-} perlCS;
-
-typedef perlHDF* ClearSilver__HDF;
-typedef perlCS* ClearSilver__CS;
-
-static char* g_sort_func_name;
-
-static void debug(char* fmt, ...)
-{
-#ifdef DEBUG_MODE
- va_list argp;
- va_start(argp, fmt);
- vprintf(fmt, argp);
- va_end(argp);
-#endif
-}
-
-static NEOERR *output (void *ctx, char *s)
-{
- sv_catpv((SV*)ctx, s);
-
- return STATUS_OK;
-}
-
-static int sortFunction(const void* in_a, const void* in_b)
-{
- HDF** hdf_a;
- HDF** hdf_b;
- perlHDF a, b;
- SV* sv_a;
- SV* sv_b;
- int count;
- int ret;
-
- dSP;
-
- hdf_a = (HDF**)in_a;
- hdf_b = (HDF**)in_b;
-
- /* convert to a type Perl can access */
- a.hdf = *hdf_a;
- a.err = STATUS_OK;
- b.hdf = *hdf_b;
- b.err = STATUS_OK;
-
- ENTER;
- SAVETMPS;
-
- PUSHMARK(SP);
- sv_a = sv_newmortal();
- sv_setref_pv(sv_a, "ClearSilver::HDF", (void*)&a);
-
- sv_b = sv_newmortal();
- sv_setref_pv(sv_b, "ClearSilver::HDF", (void*)&b);
-
- XPUSHs(sv_a);
- XPUSHs(sv_b);
-
- PUTBACK;
-
- count = call_pv(g_sort_func_name, G_SCALAR);
-
- SPAGAIN;
-
- if (count != 1)
- croak("Big trouble\n");
-
- PUTBACK;
-
- ret = POPi;
-
- FREETMPS;
- LEAVE;
-
- return ret;
-}
-
-
-
-
-
-MODULE = ClearSilver PACKAGE = ClearSilver::HDF PREFIX = perlhdf_
-
-ClearSilver::HDF
-perlhdf_new(self)
- char* self
- PREINIT:
- ClearSilver__HDF hdf;
- CODE:
- debug("%s\n", self);
- hdf = (ClearSilver__HDF)malloc(sizeof(perlHDF));
- if (!hdf) {
- RETVAL = NULL;
- } else {
- hdf->err = hdf_init(&(hdf->hdf));
- RETVAL = hdf;
- }
- OUTPUT:
- RETVAL
-
-void
-perlhdf_DESTROY(hdf)
- ClearSilver::HDF hdf;
- CODE:
- debug("hdf_DESTROY:%x\n", hdf);
- hdf_destroy(&(hdf->hdf));
-
-
-int
-perlhdf_setValue(hdf, key, value)
- ClearSilver::HDF hdf
- char* key
- char* value
- CODE:
- hdf->err = hdf_set_value(hdf->hdf, key, value);
- if (hdf->err == STATUS_OK) {
- RETVAL = 0;
- } else {
- RETVAL = 1;
- }
- OUTPUT:
- RETVAL
-
-
-char*
-perlhdf_getValue(hdf, key, default_value)
- ClearSilver::HDF hdf
- char* key
- char* default_value
- CODE:
- RETVAL = hdf_get_value(hdf->hdf, key, default_value);
- OUTPUT:
- RETVAL
-
-
-int
-perlhdf_copy(hdf, name, src);
- ClearSilver::HDF hdf
- char* name
- ClearSilver::HDF src
- CODE:
- hdf->err = hdf_copy(hdf->hdf, name, src->hdf);
- if (hdf->err == STATUS_OK) {
- RETVAL = 0;
- } else {
- RETVAL = 1;
- }
- OUTPUT:
- RETVAL
-
-int
-perlhdf_readFile(hdf, filename)
- ClearSilver::HDF hdf
- char* filename
- CODE:
- hdf->err = hdf_read_file(hdf->hdf, filename);
- if (hdf->err == STATUS_OK) {
- RETVAL = 1;
- } else {
- RETVAL = 0;
- }
- OUTPUT:
- RETVAL
-
-int
-perlhdf_writeFile(hdf, filename)
- ClearSilver::HDF hdf
- char* filename
- CODE:
- hdf->err = hdf_write_file(hdf->hdf, filename);
- if (hdf->err == STATUS_OK) {
- RETVAL = 1;
- } else {
- RETVAL = 0;
- }
- OUTPUT:
- RETVAL
-
-ClearSilver::HDF
-perlhdf_getObj(hdf, name)
- ClearSilver::HDF hdf;
- char* name
- PREINIT:
- HDF* tmp_hdf;
- perlHDF* perlhdf;
- CODE:
- do {
- tmp_hdf = hdf_get_obj(hdf->hdf, name);
- if (!tmp_hdf) {
- RETVAL = NULL;
- break;
- }
- perlhdf = (perlHDF*)malloc(sizeof(perlHDF));
- if (!perlhdf) {
- RETVAL = NULL;
- break;
- }
- perlhdf->hdf = tmp_hdf;
- perlhdf->err = STATUS_OK;
- RETVAL = perlhdf;
- } while (0);
- OUTPUT:
- RETVAL
-
-ClearSilver::HDF
-perlhdf_objChild(hdf)
- ClearSilver::HDF hdf;
- PREINIT:
- HDF* tmp_hdf;
- perlHDF* child;
- CODE:
- do {
- tmp_hdf = hdf_obj_child(hdf->hdf);
- if (!tmp_hdf) {
- RETVAL = NULL;
- break;
- }
- child = (perlHDF*)malloc(sizeof(perlHDF));
- if (!child) {
- RETVAL = NULL;
- break;
- }
- child->hdf = tmp_hdf;
- child->err = STATUS_OK;
- RETVAL = child;
- } while (0);
- OUTPUT:
- RETVAL
-
-
-ClearSilver::HDF
-perlhdf_getChild(hdf, name)
- ClearSilver::HDF hdf;
- char* name;
- PREINIT:
- HDF* tmp_hdf;
- perlHDF* child;
- CODE:
- do {
- tmp_hdf = hdf_get_child(hdf->hdf, name);
- if (!tmp_hdf) {
- RETVAL = NULL;
- break;
- }
- child = (perlHDF*)malloc(sizeof(perlHDF));
- if (!child) {
- RETVAL = NULL;
- break;
- }
- child->hdf = tmp_hdf;
- child->err = STATUS_OK;
- RETVAL = child;
- } while (0);
- OUTPUT:
- RETVAL
-
-char*
-perlhdf_objValue(hdf)
- ClearSilver::HDF hdf;
- CODE:
- RETVAL = hdf_obj_value(hdf->hdf);
- OUTPUT:
- RETVAL
-
-char*
-perlhdf_objName(hdf)
- ClearSilver::HDF hdf;
- CODE:
- RETVAL = hdf_obj_name(hdf->hdf);
- OUTPUT:
- RETVAL
-
-ClearSilver::HDF
-perlhdf_objNext(hdf)
- ClearSilver::HDF hdf;
- PREINIT:
- HDF* tmp_hdf;
- perlHDF* next;
- CODE:
- do {
- tmp_hdf = hdf_obj_next(hdf->hdf);
- if (!tmp_hdf) {
- RETVAL = NULL;
- break;
- }
- next = (perlHDF*)malloc(sizeof(perlHDF));
- if (!next) {
- RETVAL = NULL;
- break;
- }
- next->hdf = tmp_hdf;
- next->err = STATUS_OK;
- RETVAL = next;
- } while (0);
- OUTPUT:
- RETVAL
-
-int
-perlhdf_sortObj(hdf, func_name)
- ClearSilver::HDF hdf;
- char* func_name;
- PREINIT:
- NEOERR* err;
- CODE:
- g_sort_func_name = func_name;
- err = hdf_sort_obj(hdf->hdf, sortFunction);
- RETVAL = 0;
- OUTPUT:
- RETVAL
-
-
-int
-perlhdf_setSymlink(hdf, src, dest)
- ClearSilver::HDF hdf;
- char* src;
- char* dest;
- PREINIT:
- NEOERR* err;
- CODE:
- err = hdf_set_symlink (hdf->hdf, src, dest);
- if (err == STATUS_OK) {
- RETVAL = 1;
- } else {
- RETVAL = 0;
- }
- OUTPUT:
- RETVAL
-
-
-int
-perlhdf_removeTree(hdf, name)
- ClearSilver::HDF hdf;
- char* name;
- PREINIT:
- NEOERR* err;
- CODE:
- err = hdf_remove_tree(hdf->hdf, name);
- if (err == STATUS_OK) {
- RETVAL = 1;
- } else {
- RETVAL = 0;
- }
- OUTPUT:
- RETVAL
-
-
-MODULE = ClearSilver PACKAGE = ClearSilver::CS PREFIX = perlcs_
-
-ClearSilver::CS
-perlcs_new(self, hdf)
- char* self
- ClearSilver::HDF hdf;
- PREINIT:
- perlCS* cs;
- CODE:
- cs = (perlCS*)malloc(sizeof(perlCS));
- if (!cs) {
- RETVAL = NULL;
- } else {
- cs->err = cs_init(&(cs->cs), hdf->hdf);
- if (cs->err == STATUS_OK) {
- cs->err = cgi_register_strfuncs(cs->cs);
- }
- RETVAL = cs;
- }
- OUTPUT:
- RETVAL
-
-void
-perlcs_DESTROY(cs)
- ClearSilver::CS cs;
- CODE:
- debug("perlcs_DESTROY() is called\n");
- cs_destroy(&(cs->cs));
-
-void
-perlcs_displayError(cs)
- ClearSilver::CS cs;
- CODE:
- nerr_log_error(cs->err);
-
-char *
-perlcs_render(cs)
- ClearSilver::CS cs
- CODE:
- {
- SV *str = newSV(0);
- cs->err = cs_render(cs->cs, str, output);
- if (cs->err == STATUS_OK) {
- ST(0) = sv_2mortal(str);
- } else {
- SvREFCNT_dec(str);
- ST(0) = &PL_sv_undef;
- }
- XSRETURN(1);
- }
-
-int
-perlcs_parseFile(cs, cs_file)
- ClearSilver::CS cs
- char* cs_file
- CODE:
- do {
- cs->err = cs_parse_file(cs->cs, cs_file);
- if (cs->err != STATUS_OK) {
- cs->err = nerr_pass(cs->err);
- RETVAL = 0;
- break;
- }
- RETVAL = 1;
- } while (0);
- OUTPUT:
- RETVAL
-
-int
-perlcs_parseString(cs, in_str)
- ClearSilver::CS cs
- char* in_str
- PREINIT:
- char* cs_str;
- int len;
- CODE:
- do {
- len = strlen(in_str);
- cs_str = (char *)malloc(len);
- if (!cs_str) {
- RETVAL = 0;
- break;
- }
- strcpy(cs_str, in_str);
- cs->err = cs_parse_string(cs->cs, cs_str, len);
- if (cs->err != STATUS_OK)
- RETVAL = 0;
- RETVAL = 1;
- } while (0);
- OUTPUT:
- RETVAL
-
-
-
diff --git a/perl/MANIFEST b/perl/MANIFEST
deleted file mode 100644
index 1c6960b..0000000
--- a/perl/MANIFEST
+++ /dev/null
@@ -1,11 +0,0 @@
-Changes
-ClearSilver.pm
-ClearSilver.xs
-typemap
-Makefile.PL
-MANIFEST
-README
-test.pl
-test.hdf
-test.gold
-
diff --git a/perl/Makefile.PL b/perl/Makefile.PL
deleted file mode 100644
index ebb114b..0000000
--- a/perl/Makefile.PL
+++ /dev/null
@@ -1,18 +0,0 @@
-use ExtUtils::MakeMaker;
-# See lib/ExtUtils/MakeMaker.pm for details of how to influence
-# the contents of the Makefile that is written.
-WriteMakefile(
- 'NAME' => 'ClearSilver',
- 'VERSION_FROM' => 'ClearSilver.pm', # finds $VERSION
- 'PREREQ_PM' => {}, # e.g., Module::Name => 1.1
- ($] >= 5.005 ? ## Add these new keywords supported since 5.005
- (ABSTRACT_FROM => 'ClearSilver.pm', # retrieve abstract from module
- AUTHOR => 'A. U. Thor <a.u.thor@a.galaxy.far.far.away>') : ()),
- # TODO: don't include -lz if we aren't depending on it
- 'LIBS' => ['-L../libs -lneo_cgi -lneo_cs -lneo_utl -lz'],
- 'DEFINE' => '', # e.g., '-DHAVE_SOMETHING'
- # Insert -I. if you add *.h files later:
- 'INC' => '-I../',
- # Un-comment this if you add C files to link with later:
- # 'OBJECT' => '$(O_FILES)', # link all the C files too
-);
diff --git a/perl/README b/perl/README
deleted file mode 100644
index 92b9f57..0000000
--- a/perl/README
+++ /dev/null
@@ -1,43 +0,0 @@
-ClearSilver version 0.02
-========================
-
-The README is used to introduce the module and provide instructions on
-how to install the module, any machine dependencies it may have (for
-example C compilers and installed libraries) and any other information
-that should be provided before the module is installed.
-
-A README file is required for CPAN modules since CPAN extracts the
-README file from a module distribution so that people browsing the
-archive can use it get an idea of the modules uses. It is usually a
-good idea to provide version information here so that people can
-decide whether fixes for the module are worth downloading.
-
-INSTALLATION
-
-This Perl module is supposed to be put under ClearSilver's
-top directory as perl/.
-
-To install this module type the following:
-
- cd perl/
- perl Makefile.PL
- make
- make test
- sudo make install
-
-DEPENDENCIES
-
-This module requires these other modules and libraries:
-
- libneo_cgi.a libneo_cs.a libneo_utl.a
-
-COPYRIGHT AND LICENCE
-
- This Perl module can be distributed under GPL version 2, or
- under the Neotonic ClearSilver License
-
-Copyright (C) 2002 Gaku Ueda
-
-More up-to-date information available from:
-
-http://www.gaku.net/cs/en/
diff --git a/perl/test.cs b/perl/test.cs
deleted file mode 100644
index db7f46d..0000000
--- a/perl/test.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-<?cs if:TopNode.2nd1.Entry1 ?>
-<?cs var:TopNode.2nd1.Entry1 ?>
-<?cs /if ?>
-<?cs each:leaf =TopNode.2nd1 ?>
-<?cs var:leaf ?>
-<?cs /each ?>
-
diff --git a/perl/test.gold b/perl/test.gold
deleted file mode 100644
index 1a066df..0000000
--- a/perl/test.gold
+++ /dev/null
@@ -1,11 +0,0 @@
-value3
-value1
-
-
-value1
-
-value2
-
-value3
-
-
diff --git a/perl/test.hdf b/perl/test.hdf
deleted file mode 100644
index 3df2268..0000000
--- a/perl/test.hdf
+++ /dev/null
@@ -1,14 +0,0 @@
-
-TopNode.2nd1.Entry1 = value1
-
-TopNode.2nd1 {
- Entry2 = value2
- Entry3 = value3
-}
-
-Sort.Data {
- entry1 = 200
- entry2 = 144
- entry3 = 3
-}
-
diff --git a/perl/test.out b/perl/test.out
deleted file mode 100644
index 1a066df..0000000
--- a/perl/test.out
+++ /dev/null
@@ -1,11 +0,0 @@
-value3
-value1
-
-
-value1
-
-value2
-
-value3
-
-
diff --git a/perl/test.pl b/perl/test.pl
deleted file mode 100644
index ae84300..0000000
--- a/perl/test.pl
+++ /dev/null
@@ -1,177 +0,0 @@
-# Before `make install' is performed this script should be runnable with
-# `make test'. After `make install' it should work as `perl test.pl'
-#########################
-
-# change 'tests => 1' to 'tests => last_test_to_print';
-
-sub result {
- my($i, $state) = @_;
- if ($state) {
- print "ok $i\n";
- } else {
- print "ng $i\n";
- exit $i;
- }
-}
-
-sub sortFunc {
- my($a, $b) = @_;
- my($va, $vb);
-
- $va = $a->objValue();
- $vb = $b->objValue();
- return $va <=> $vb;
-}
-
-use Test;
-BEGIN { plan tests => 13 };
-use ClearSilver;
-ok(1); # If we made it this far, we're ok.
-
-$testnum = 2;
-#
-# test new()
-#
-$hdf = ClearSilver::HDF->new();
-$hdf ? result($testnum, 1) : result($testnum, 0);
-$testnum++;
-
-#
-# test reading file
-#
-$ret = $hdf->readFile("test.hdf");
-$ret ? result($testnum, 1) : result($testnum, 0);
-$testnum++;
-
-#
-# test getObj()
-#
-$lev2_node = $hdf->getObj("TopNode.2nd1");
-$lev2_node ? result($testnum, 1) : result($testnum, 0);
-$testnum++;
-
-
-#
-# test objName()
-#
-$lev2_name = $lev2_node->objName();
-($lev2_name eq "2nd1") ? result($testnum, 1) : result($testnum, 0);
-$testnum++;
-
-#
-# test objChild() & objValue()
-#
-$lev3_node = $lev2_node->objChild();
-if (!$lev3_node) {
- result($testnum, 0);
-}
-$val = $lev3_node->objValue();
-($val eq "value1") ? result($testnum, 1) : result($testnum, 0);
-$testnum++;
-
-#
-# test objNext()
-#
-$next_node = $lev3_node->objNext();
-if (!$lev3_node) {
- result($testnum, 0);
-}
-$nam = $next_node->objName();
-($nam eq "Entry2") ? result($testnum, 1) : result($testnum, 0);
-$testnum++;
-
-#
-# test getChild()
-#
-$lev2_node = $hdf->getChild("TopNode.2nd1");
-$lev2_node ? result($testnum, 1) : result($testnum, 0);
-$testnum++;
-
-#
-# test setValue() & getValue()
-#
-$hdf->setValue("Data.1", "Value1");
-$str = $hdf->getValue("Data.1", "default");
-($str eq "Value1") ? result($testnum, 1) : result($testnum, 0);
-$testnum++;
-
-$str = $hdf->getValue("Data.2", "default"); # doesn't exist
-($str eq "default") ? result($testnum, 1) : result($testnum, 0);
-$testnum++;
-
-#
-# test copy tree
-#
-$copy = ClearSilver::HDF->new();
-$ret = $copy->copy("", $hdf);
-$ret ? result($testnum, 0) : result($testnum, 1);
-$testnum++;
-$str = $copy->getValue("Data.1", "default");
-print $str
-($str eq "Value1") ? result($testnum, 1) : result($testnum, 0);
-$testnum++;
-
-#
-# test setSymlink()
-#
-$ret = $copy->setSymlink( "BottomNode" ,"TopNode");
-$ret ? result($testnum, 1) : result($testnum, 0);
-$testnum++;
-$tmp = $copy->getObj("BottomNode.2nd1");
-$tmp ? result($testnum, 1) : result($testnum, 0);
-$testnum++;
-
-#
-# test removeTree()
-#
-$ret = $copy->removeTree("TopNode");
-$ret ? result($testnum, 1) : result($testnum, 0);
-$testnum++;
-$tmp = $copy->getObj("TopNode.2nd1");
-$tmp ? result($testnum, 0) : result($testnum, 1);
-$testnum++;
-
-#
-# test sortObj()
-#
-$sort_top = $hdf->getObj("Sort.Data");
-$sort_top->sortObj("sortFunc");
-$child = $sort_top->objChild();
-$name = $child->objName();
-($name eq "entry3") ? result($testnum, 1) : result($testnum, 0);
-$testnum++;
-
-
-#
-# test CS
-#
-$cs = ClearSilver::CS->new($hdf);
-$cs ? result($testnum, 1) : result($testnum, 0);
-$testnum++;
-
-#
-# parseString() and render()
-#
-$ret = $cs->parseString("<?cs var:TopNode.2nd1.Entry3 ?>");
-if (!$ret) {
- result($testnum, 0);
-}
-$ret = $cs->render();
-($ret eq "value3") ? result($testnum, 1) : result($testnum, 0);
-$testnum++;
-
-#
-# parseFile()
-#
-$ret = $cs->parseFile("test.cs");
-if (!$ret) {
- result($testnum, 0);
-}
-$ret = $cs->render();
-open(FH, "> test.out");
-print FH $ret;
-close(FH);
-$ret = system("diff test.gold test.out > /dev/null");
-$ret ? result($testnum, 0) : result($testnum, 1);
-
-
diff --git a/perl/typemap b/perl/typemap
deleted file mode 100644
index ffcaf93..0000000
--- a/perl/typemap
+++ /dev/null
@@ -1,3 +0,0 @@
-TYPEMAP
-ClearSilver::HDF T_PTROBJ
-ClearSilver::CS T_PTROBJ
diff --git a/ports/freebsd/Makefile b/ports/freebsd/Makefile
deleted file mode 100644
index 4681cde..0000000
--- a/ports/freebsd/Makefile
+++ /dev/null
@@ -1,37 +0,0 @@
-# New ports collection makefile for: clearsilver
-# Date created: 13 April 2003
-# Whom: Brandon Long <blong@fiction.net>
-#
-# $FreeBSD$
-#
-
-PORTNAME= clearsilver
-PORTVERSION= 0.9.7
-CATEGORIES= www python perl ruby
-DISTDIR= /home/blong/ports/distfiles
-MASTER_SITES= http://www.clearsilver.net/downloads/
-
-MAINTAINER= blong@fiction.net
-COMMENT= ClearSilver is a fast, powerful, and language-neutral HTML template system.
-
-.if defined(PACKAGE_BUILDING)
-WITH_PERL= yes
-WITH_PYTHON= yes
-.endif
-
-.if defined(WITH_PYTHON)
-USE_PYTHON= yes
-.endif
-
-.if defined(WITH_PERL)
-USE_PERL5= yes
-.endif
-
-.if defined(WITH_RUBY)
-USE_RUBY= yes
-.endif
-
-GNU_CONFIGURE= yes
-USE_GMAKE= yes
-
-.include <bsd.port.mk>
diff --git a/ports/freebsd/pkg-descr b/ports/freebsd/pkg-descr
deleted file mode 100644
index 96c3a4e..0000000
--- a/ports/freebsd/pkg-descr
+++ /dev/null
@@ -1,14 +0,0 @@
-
-ClearSilver is a fast, powerful, and language-neutral HTML template system.
-In both static content sites and dynamic HTML applications, it provides a
-separation between presentation code and application logic which makes
-working with your project easier.
-
-Because it's written as a C-library, and exported to scripting languages
-like Python, Perl, and Ruby via modules, it is extremely fast compared to template
-systems written in a script language.
-
-WWW: http://www.clearsilver.net/
-
-- Brandon
-blong@fiction.net
diff --git a/ports/freebsd/pkg-plist b/ports/freebsd/pkg-plist
deleted file mode 100644
index 6ea9c93..0000000
--- a/ports/freebsd/pkg-plist
+++ /dev/null
@@ -1,33 +0,0 @@
-ClearSilver.h
-cs_config.h
-cgi/cgi.h
-cgi/cgiwrap.h
-cgi/date.h
-cgi/html.h
-cs/cs.h
-util/dict.h
-util/filter.h
-util/neo_date.h
-util/neo_err.h
-util/neo_files.h
-util/neo_hash.h
-util/neo_hdf.h
-util/neo_misc.h*
-util/neo_net.h
-util/neo_rand.h
-util/neo_server.h
-util/neo_str.h
-util/rcfs.h
-util/skiplist.h
-util/ulist.h
-util/ulocks.h
-util/wdb.h
-util/wildmat.h
-lib/libneo_cgi.a
-lib/libneo_cs.a
-lib/libneo_utl.a
-bin/static.cgi
-bin/cstest
-%%PYTHON_SITELIBDIR%%/neo_cgi.so
-lib/perl5/site_perl/%%PERL_VER%%/%%PERL_ARCH%%/ClearSilver.pm
-lib/perl5/site_perl/%%PERL_VER%%/%%PERL_ARCH%%/auto/ClearSilver/ClearSilver.so
diff --git a/ports/rpm/clearsilver.spec b/ports/rpm/clearsilver.spec
deleted file mode 100644
index 24014d9..0000000
--- a/ports/rpm/clearsilver.spec
+++ /dev/null
@@ -1,221 +0,0 @@
-#
-# spec file for ClearSilver Linux RPM (based on RedHat installs)
-#
-# Caveats: There is some difficulty getting this file to sync with the
-# actual information discovered by configure. In theory, some of this
-# stuff in here could be driven off of configure.. except that configure
-# is supposed to be driven off this file...
-#
-# * PREFIX vs perl/python PREFIX: where the perl/python modules get
-# installed is actually defined by the installation of perl/python you
-# are using to build the module. For that reason, we need to use a
-# different PREFIX for the python/perl modules. For python, we just
-# override PYTHON_SITE during install, for perl we have to run make
-# install again with a new PREFIX. This means the perl module might be
-# installed in two different locations, but we just package the second
-# one.
-#
-# * The perl suggestions for rpms:
-# http://archive.develooper.com/perl-dist@perl.org/msg00055.html
-# suggest using find to get all of the files for the perl module. I'm
-# currently hard coding them since we're not just building the perl
-# module. In particular, the file path of the ClearSilver.3pm.gz
-# manpage is probably wrong on some platforms.
-#
-# * The apache/java/ruby/csharp packages are not yet finished. For one,
-# all of my machines are redhat 7.3 or earlier, and don't have rpms
-# installed for java/ruby/csharp, and my apache installation is Neotonic
-# specific and therefore not much help to the rest of you.
-
-##########################################################################
-## Edit these settings
-%define __prefix /usr/local
-%define __python /usr/bin/python
-%define with_python_subpackage 1 %{nil}
-%define with_perl_subpackage 1 %{nil}
-
-# These packages aren't tested at all and probably won't build
-%define with_apache_subpackage 0
-%define with_java_subpackage 0
-%define with_ruby_subpackage 0
-%define with_csharp_subpackage 0
-
-##########################################################################
-## All of the rest of this should work correctly based on the top...
-## maybe
-%define python_sitepath %(%{__python} -c "import site; print site.sitedirs[0]")
-%define perl_sitearch %(eval "`perl -V:installsitearch`"; echo $installsitearch)
-%define perl_prefix %(eval "`perl -V:prefix`"; echo $prefix)
-%define ruby_sitepath %(echo "i dunno")
-%define ruby_version %(echo "i dunno")
-%define ruby_arch %(echo "i dunno")
-%define apache_libexec %(eval `/httpd/bin/apxs -q LIBEXECDIR`)
-
-Summary: Neotonic ClearSilver
-Name: clearsilver
-Version: 0.10.5
-Release: 1
-Copyright: Open Source - Neotonic ClearSilver License (Apache 1.1 based)
-Group: Development/Libraries
-Source: http://www.clearsilver.net/downloads/clearsilver-0.10.5.tar.gz
-URL: http://www.clearsilver.net/
-Vendor: Neotonic Software Corporation, Inc.
-Packager: Brandon Long <blong@neotonic.com>
-BuildRequires: zlib-devel
-%if %{with_python_subpackage}
-BuildRequires: python-devel >= 1.5.2
-%endif
-%if %{with_perl_subpackage}
-BuildRequires: perl >= 0:5.006
-%endif
-%if %{with_ruby_subpackage}
-BuildRequires: ruby >= 1.4.5
-%endif
-
-BuildRoot: %{_tmppath}/%{name}-root
-
-%description
-ClearSilver is a fast, powerful, and language-neutral HTML template system.
-In both static content sites and dynamic HTML applications, it provides a
-separation between presentation code and application logic which makes
-working with your project easier.
-
-Because it's written as a C-library, and exported to scripting languages
-like Python and Perl via modules, it is extremely fast compared to template
-systems written in a script language.
-
-%if %{with_python_subpackage}
-%package python
-Summary: Neotonic ClearSilver Python Module
-Group: Development/Libraries
-Requires: clearsilver = %PACKAGE_VERSION
-%requires_eq python
-
-%description python
-The clearsilver-python package provides a python interface to the
-clearsilver CGI kit and templating system.
-%endif
-
-%if %{with_perl_subpackage}
-%package perl
-Summary: Neotonic ClearSilver Perl Module
-Group: Development/Libraries
-Requires: clearsilver = %PACKAGE_VERSION
-Requires: perl >= 0:5.006
-%requires_eq perl
-
-%description perl
-The clearsilver-perl package provides a perl interface to the
-clearsilver templating system.
-%endif
-
-%if %{with_ruby_subpackage}
-%package ruby
-Summary: Neotonic ClearSilver Ruby Module
-Group: Development/Libraries
-Requires: clearsilver = %PACKAGE_VERSION
-Requires: ruby >= 1.4.5
-
-%description ruby
-The clearsilver-ruby package provides a ruby interface to the
-clearsilver templating system.
-%endif
-
-%if %{with_apache_subpackage}
-%package apache
-Summary: Neotonic ClearSilver Apache Module
-Group: Development/Libraries
-Requires: clearsilver = %PACKAGE_VERSION
-Requires: apache >= 1.3.0
-Requires: apache < 1.4
-
-%description apache
-The clearsilver-apache package provides an Apache 1.3.x module for
-loading ClearSilver CGI's as shared libraries.
-%endif
-
-%if %{with_java_subpackage}
-%package java
-Group: Development/Libraries
-Requires: clearsilver = %PACKAGE_VERSION
-
-%description java
-The clearsilver-java package provides a java jni interface to the
-clearsilver templating system.
-%endif
-
-%prep
-%setup
-
-%build
-./configure --prefix=%{__prefix} --with-python=%{__python}
-make
-
-%install
-make PREFIX="$RPM_BUILD_ROOT%{__prefix}" prefix="$RPM_BUILD_ROOT%{__prefix}" PYTHON_SITE="$RPM_BUILD_ROOT%{python_sitepath}" install
-cd perl
-make PREFIX="$RPM_BUILD_ROOT%{perl_prefix}" install
-cd ..
-
-%files
-%{__prefix}/include/ClearSilver/ClearSilver.h
-%{__prefix}/include/ClearSilver/cs_config.h
-%{__prefix}/include/ClearSilver/cgi/cgi.h
-%{__prefix}/include/ClearSilver/cgi/cgiwrap.h
-%{__prefix}/include/ClearSilver/cgi/date.h
-%{__prefix}/include/ClearSilver/cgi/html.h
-%{__prefix}/include/ClearSilver/cs/cs.h
-%{__prefix}/include/ClearSilver/util/dict.h
-%{__prefix}/include/ClearSilver/util/filter.h
-%{__prefix}/include/ClearSilver/util/neo_date.h
-%{__prefix}/include/ClearSilver/util/neo_err.h
-%{__prefix}/include/ClearSilver/util/neo_files.h
-%{__prefix}/include/ClearSilver/util/neo_hash.h
-%{__prefix}/include/ClearSilver/util/neo_hdf.h
-%{__prefix}/include/ClearSilver/util/neo_misc.h
-%{__prefix}/include/ClearSilver/util/neo_net.h
-%{__prefix}/include/ClearSilver/util/neo_rand.h
-%{__prefix}/include/ClearSilver/util/neo_server.h
-%{__prefix}/include/ClearSilver/util/neo_str.h
-%{__prefix}/include/ClearSilver/util/rcfs.h
-%{__prefix}/include/ClearSilver/util/skiplist.h
-%{__prefix}/include/ClearSilver/util/ulist.h
-%{__prefix}/include/ClearSilver/util/ulocks.h
-%{__prefix}/include/ClearSilver/util/wdb.h
-%{__prefix}/include/ClearSilver/util/wildmat.h
-%{__prefix}/lib/libneo_cgi.a
-%{__prefix}/lib/libneo_cs.a
-%{__prefix}/lib/libneo_utl.a
-%{__prefix}/bin/static.cgi
-%{__prefix}/bin/cstest
-%{__prefix}/man/man3
-
-%if %{with_python_subpackage}
-%files python
-%{python_sitepath}/neo_cgi.so
-%endif
-
-%if %{with_perl_subpackage}
-%files perl
-%{perl_sitearch}/ClearSilver.pm
-%{perl_sitearch}/auto/ClearSilver/ClearSilver.so
-%{perl_sitearch}/auto/ClearSilver/ClearSilver.bs
-%{perl_prefix}/share/man/man3/ClearSilver.3pm.gz
-%endif
-
-%if %{with_ruby_subpackage}
-%files ruby
-%{ruby_sitepath}/%(ruby_version}/neo.rb
-%{ruby_sitepath}/%(ruby_version}/$(ruby_arch}/hdf.so
-%endif
-
-%if %{with_apache_subpackage}
-%files apache
-%{apache_libexec}/mod_ecs.so
-%endif
-
-%if %{with_java_subpackage}
-%files java
-%{__prefix}/lib/clearsilver.jar
-%{__prefix}/lib/libclearsilver-jni.so
-%endif
diff --git a/python/Makefile b/python/Makefile
deleted file mode 100644
index e6cbfa8..0000000
--- a/python/Makefile
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-ifeq ($(NEOTONIC_ROOT),)
-NEOTONIC_ROOT = ..
-endif
-
-include $(NEOTONIC_ROOT)/rules.mk
-
-NEO_UTIL_SO = neo_cgi.so
-NEO_UTIL_PYD = neo_cgi.pyd
-NEO_UTIL_SRC = neo_cgi.c neo_util.c neo_cs.c
-NEO_UTIL_OBJ = $(NEO_UTIL_SRC:%.c=%.o)
-
-CFLAGS += $(PYTHON_INC)
-DLIBS += -lneo_cgi -lneo_cs -lneo_utl
-LIBS += $(DLIBS) $(DB2_LIB)
-
-ifeq ($(USE_MINGW32),1)
-TARGETS = $(NEO_UTIL_PYD)
-else
-TARGETS = $(NEO_UTIL_SO)
-endif
-
-all: $(TARGETS)
-
-$(NEO_UTIL_SO): setup.py $(NEO_UTIL_SRC) $(DEP_LIBS)
- rm -f $(NEO_UTIL_SO)
- CC="$(CC)" LDSHARED="$(LDSHARED)" $(PYTHON) setup.py build_ext --inplace
-
-OLD_NEO_UTIL_SO:
- $(LDSHARED) -o $@ $(LDFLAGS) $(NEO_UTIL_OBJ) $(LIBS)
-
-setup:
- $(PYTHON) setup.py build_ext --inplace
-
-$(NEO_UTIL_PYD): $(NEO_UTIL_OBJ) $(DEP_LIBS)
- dllwrap --dllname neo_cgi.pyd --driver-name gcc \
- --def neo_cgi.def -o neo_cgi.pyd \
- $(NEO_UTIL_OBJ) -s --entry _DllMain@12 \
- --target=i386-mingw32 \
- $(LDFLAGS) $(PYTHON_LIB) $(LIBS)
-
-install: all
- $(NEOTONIC_ROOT)/mkinstalldirs $(DESTDIR)$(PYTHON_SITE)
- $(INSTALL) $(TARGETS) $(DESTDIR)$(PYTHON_SITE)
-
-clean:
- $(RM) *.o
-
-distclean:
- $(RM) Makefile.depends $(TARGETS) *.o
- $(RM) -r build
diff --git a/python/README.txt b/python/README.txt
deleted file mode 100644
index 9a74b30..0000000
--- a/python/README.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-------------------------
-Python Clearsilver Module
-By Brandon Long
-
-Windows port by David Jeske
-------------------------
-
-This is the python clearsilver module. You can see the online
-documentation for the Python API here:
-
- http://www.clearsilver.net/docs/python/
-
-COMPILING on UNIX
-
-Compiling from source on Linux (UNIX) should be pretty
-straightforward. Simply make sure that the Makefile and top level
-rules.mk point to your Python installation of choice. Comments or
-questions to blong@fiction.net
-
-WINDOWS BINARY
-
-If you are using Python2.2, we highly recommend you download the
-pre-built binary. You can download a windows binary of the module from
-the clearsilver download page here:
-
- http://www.clearsilver.net/downloads/
-
-COMPILING on Windows
-
-If you must compile on windows, here is the set of steps you need to
-follow for Python22. Comments or questions to jeske@chat.net.
-
-1) Download and Install Python2.2 from:
-
- http://www.python.org/ftp/python/2.2.1/Python-2.2.1.exe
-
-2) Download and Install Mingw32-2.0 and binutils from:
-
- http://prdownloads.sourceforge.net/mingw/MinGW-2.0.0-3.exe?download
- http://prdownloads.sourceforge.net/mingw/binutils-2.13-20020903-1.tar.gz?download
-
-3) Download and Install UNIX Tools and Make from:
-
- http://unxutils.sourceforge.net/UnxUtils.zip
-
- http://prdownloads.sourceforge.net/mingw/make-3.79.1-20010722.tar.gz
-
-**** ALTERNATIVELY *****
-
- You can use msys, just download 1.08 or later (well, that's what I
- tested) at:
- http://prdownloads.sourceforge.net/mingw/MSYS-1.0.8.exe
-
-4) Add the mingw32 binary directory to your path
-
-**** ALTERNATIVELY *****
-
- Using msys, just click on the msys icon on your desktop to launch
- the sh command line window. Note that the python executable won't
- do screen output correctly from this window, but it does work.
-
-5) Build the libpython22.a import library using these steps:
-
- a) Download the Py-mingw32 tools:
-
- http://starship.python.net/crew/kernr/mingw32/Py-mingw32-tools.zip
-
- b) extract them to C:\Python22\libs
-
- c) edit lib2def.py and replace python15->python22, Python15->Python22
-
- d) execute these commands:
-
- C:\Python22\libs> lib2def.py python22.lib > python22.def
- C:\Python22\libs> dlltool --dllname python22.dll --def python22.def --output-lib libpython22.a
-
- Reference:
-
- http://starship.python.net/pipermail/mmtk/2002/000398.html
-
-6) Check the python library and include paths in the neotonic/rules.mk
-
- You should see:
- PYTHON_INC = -I/c/python22/include
- PYTHON_LIB = -L/c/python22/libs -lpython22
-
- These should have been found automatically by the configure script.
-
-7) Then type "make" in the neotonic\python directory...
-
- Ignore all the warnings aboue HAVE_ defines being re-defined. This
- are just collisions between the clearsilver config file and the python
- config file.
diff --git a/python/examples/base/CSPage.py b/python/examples/base/CSPage.py
deleted file mode 100755
index ad61fef..0000000
--- a/python/examples/base/CSPage.py
+++ /dev/null
@@ -1,224 +0,0 @@
-#!/neo/opt/bin/python
-
-import neo_cgi
-import sys, os, string
-import time
-from log import *
-
-# errors thrown...
-NoPageName = "NoPageName"
-NoDisplayMethod = "NoDisplayMethod"
-
-# errors signaled back to here
-Redirected = "Redirected"
-DisplayDone = "DisplayDone"
-DisplayError = "DisplayError"
-
-class Context:
- def __init__ (self):
- self.argv = sys.argv
- self.stdin = sys.stdin
- self.stdout = sys.stdout
- self.stderr = sys.stderr
- self.environ = os.environ
-
-class CSPage:
- def __init__(self, context, pagename=0,readDefaultHDF=1,israwpage=0,**parms):
- if pagename == 0:
- raise NoPageName, "missing pagename"
- self.pagename = pagename
- self.readDefaultHDF = readDefaultHDF
- self._israwpage = israwpage
- self.context = context
- self._pageparms = parms
-
- self._error_template = None
-
- self.page_start_time = time.time()
- neo_cgi.cgiWrap(context.stdin, context.stdout, context.environ)
- neo_cgi.IgnoreEmptyFormVars(1)
- self.ncgi = neo_cgi.CGI()
- self.ncgi.parse()
- self._path_num = 0
- domain = self.ncgi.hdf.getValue("CGI.ServerName","")
- domain = self.ncgi.hdf.getValue("HTTP.Host", domain)
- self.domain = domain
- self.subclassinit()
- self.setPaths([self.ncgi.hdf.getValue("CGI.DocumentRoot","")])
-
- def subclassinit(self):
- pass
-
- def setPaths(self, paths):
- for path in paths:
- self.ncgi.hdf.setValue("hdf.loadpaths.%d" % self._path_num, path)
- self._path_num = self._path_num + 1
-
- def redirectUri(self,redirectTo):
- ncgi = self.ncgi
- if ncgi.hdf.getIntValue("Cookie.debug",0) == 1:
- ncgi.hdf.setValue("CGI.REDIRECT_TO",redirectTo)
- ncgi.display("dbg/redirect.cs")
- print "<PRE>"
- print neo_cgi.htmlEscape(ncgi.hdf.dump())
- print "</PRE>"
- raise DisplayDone
-
- self.ncgi.redirectUri(redirectTo)
- raise Redirected, "redirected To: %s" % redirectTo
-
- ## ----------------------------------
- ## methods to be overridden in subclass when necessary:
-
- def setup(self):
- pass
-
- def display(self):
- raise NoDisplayMethod, "no display method present in %s" % repr(self)
-
- def main(self):
- self.setup()
- self.handle_actions()
- self.display()
-
- ## ----------------------------------
-
- def handle_actions(self):
- hdf = self.ncgi.hdf
- hdfobj = hdf.getObj("Query.Action")
- if hdfobj:
- firstchild = hdfobj.child()
- if firstchild:
- action = firstchild.name()
- if firstchild.next():
- raise "multiple actions present!!!"
-
- method_name = "Action_%s" % action
- method = getattr(self,method_name)
- apply(method,[])
-
- def start(self):
- SHOULD_DISPLAY = 1
- if self._israwpage:
- SHOULD_DISPLAY = 0
-
- ncgi = self.ncgi
-
- if self.readDefaultHDF:
- try:
- if not self.pagename is None:
- ncgi.hdf.readFile("%s.hdf" % self.pagename)
- except:
- log("Error reading HDF file: %s.hdf" % (self.pagename))
-
- DISPLAY_ERROR = 0
- ERROR_MESSAGE = ""
- # call page main function!
- try:
- self.main()
- except DisplayDone:
- SHOULD_DISPLAY = 0
- except Redirected:
- # catch redirect exceptions
- SHOULD_DISPLAY = 0
- except DisplayError, num:
- ncgi.hdf.setValue("Query.error", str(num))
- if self._error_template:
- ncgi.hdf.setValue("Content", self._error_template)
- else:
- DISPLAY_ERROR = 1
- except:
- SHOULD_DISPLAY = 0
- DISPLAY_ERROR = 1
-
- import handle_error
- handle_error.handleException("Display Failed!")
- ERROR_MESSAGE = handle_error.exceptionString()
-
- if DISPLAY_ERROR:
- print "Content-Type: text/html\n\n"
-
- # print the page
-
- print "<H1> Error in Page </H1>"
- print "A copy of this error report has been submitted to the developers. "
- print "The details of the error report are below."
-
-
- print "<PRE>"
- print neo_cgi.htmlEscape(ERROR_MESSAGE)
- print "</PRE>\n"
- # print debug info always on page error...
- print "<HR>\n"
- print "<PRE>"
- print neo_cgi.htmlEscape(ncgi.hdf.dump())
- print "</PRE>"
-
-
- etime = time.time() - self.page_start_time
- ncgi.hdf.setValue("CGI.debug.execute_time","%f" % (etime))
-
- if SHOULD_DISPLAY and self.pagename:
- debug_output = ncgi.hdf.getIntValue("page.debug",ncgi.hdf.getIntValue("Cookie.debug",0))
-
- # hijack the built-in debug output method...
- if ncgi.hdf.getValue("Query.debug","") == ncgi.hdf.getValue("Config.DebugPassword","1"):
- ncgi.hdf.setValue("Config.DebugPassword","CSPage.py DEBUG hijack (%s)" %
- ncgi.hdf.getValue("Config.DebugPassword",""))
- debug_output = 1
-
- if not debug_output:
- ncgi.hdf.setValue("Config.CompressionEnabled","1")
-
- # default display
- template_name = ncgi.hdf.getValue("Content","%s.cs" % self.pagename)
- # ncgi.hdf.setValue ("cgiout.charset", "utf-8");
-
- try:
- ncgi.display(template_name)
- except:
- print "Content-Type: text/html\n\n"
- print "CSPage: Error occured"
- import handle_error
- print "<pre>" + handle_error.exceptionString() + "</pre>"
- debug_output = 1
-
-
- # debug output
- if debug_output:
- print "<HR>\n"
- print "CSPage Debug, Execution Time: %5.3f<BR><HR>" % (etime)
- print "<PRE>"
- print neo_cgi.htmlEscape(ncgi.hdf.dump())
- print "</PRE>"
- # ncgi.hdf.setValue("hdf.DEBUG",ncgi.hdf.dump())
- # ncgi.display("debug.cs")
-
- script_name = ncgi.hdf.getValue("CGI.ScriptName","")
- if script_name:
- script_name = string.split(script_name,"/")[-1]
-
- log ("[%s] etime/dtime: %5.3f/%5.3f %s (%s)" % (self.domain, etime, time.time() - etime - self.page_start_time, script_name, self.pagename))
-
- # a protected output function to catch the output errors that occur when
- # the server is either restarted or the user pushes the stop button on the
- # browser
- def output(self, str):
- try:
- self.context.stdout.write(str)
- except IOError, reason:
- log("IOError: %s" % (repr(reason)))
- raise DisplayDone
-
-
- def allQuery (self, s):
- l = []
- if self.ncgi.hdf.getValue ("Query.%s.0" % s, ""):
- obj = self.ncgi.hdf.getChild ("Query.%s" % s)
- while obj:
- l.append(obj.value())
- obj = obj.next()
- else:
- t = self.ncgi.hdf.getValue ("Query.%s" % s, "")
- if t: l.append(t)
- return l
diff --git a/python/examples/base/PassSGMLParser.py b/python/examples/base/PassSGMLParser.py
deleted file mode 100644
index a908311..0000000
--- a/python/examples/base/PassSGMLParser.py
+++ /dev/null
@@ -1,65 +0,0 @@
-##
-## deja-vu batman, didn't I write this before?
-## This parser is designed to parse an SGML document, and the default action
-## is just to pass the data through. Based on TestSGMLParser from sgmllib.py
-## Hmm, actually, make it a flag whether to handle unknown elements
-##
-
-from sgmllib import SGMLParser
-
-class PassSGMLParser(SGMLParser):
- def __init__(self, fp, pass_unknown=0, verbose=0):
- self.pass_unknown = pass_unknown
- self.data = ""
- self.fp = fp
- SGMLParser.__init__(self, verbose)
-
- def handle_data(self, data):
- self.data = self.data + data
-
- def flush(self):
- data = self.data
- if data:
- self.data = ""
- self.write(data)
-
- def write (self, data):
- return self.fp.write(data)
-
- def write_starttag (self, tag, attrs):
- self.flush()
- if not attrs:
- self.write ("<%s>" % tag)
- else:
- self.write ("<" + tag)
- for name, value in attrs:
- self.write (" " + name + '=' + '"' + value + '"')
- self.write (">")
-
- def write_endtag (self, tag):
- self.flush()
- self.write ("</%s>" % tag)
-
- def handle_comment(self, data):
- # don't pass comments
- pass
-
- def unknown_starttag(self, tag, attrs):
- if self.pass_unknown:
- self.write_starttag (tag, attrs)
-
- def unknown_endtag(self, tag):
- if self.pass_unknown:
- self.write_endtag(tag)
-
- def handle_entityref(self, ref):
- self.flush()
- self.write ("&%s;" % ref)
-
- def handle_charref(self, ref):
- self.flush()
- self.write ("&#%s;" % ref)
-
- def close(self):
- SGMLParser.close(self)
- self.flush()
diff --git a/python/examples/base/SafeHtml.py b/python/examples/base/SafeHtml.py
deleted file mode 100644
index 2e28a01..0000000
--- a/python/examples/base/SafeHtml.py
+++ /dev/null
@@ -1,145 +0,0 @@
-## another case of deja-vu
-## this time, we want the slashdot style (what Yahoo said to do) only allow
-## certain tags... we'll make it an option
-## we'll have to tie this in some way to our HTML body displayer...
-##
-## Ok, there are basically four types of tags:
-## 1) safe - ie, <b>, <i>, etc.
-## 2) render problems - <table><form><body><frame> - these we either strip,
-## or we have to ensure they match
-## 3) definitely evil independent tags that we always strip
-## 4) definitely evil tags which denote a region, we strip the entire region
-
-from PassSGMLParser import PassSGMLParser
-from urllib import basejoin
-import string, sys
-import neo_cgi
-
-try:
- from cStringIO import StringIO
-except:
- from StringIO import StringIO
-
-class SafeHtml (PassSGMLParser):
- _safeTags = {"P":1, "LI":1, "DD":1, "DT":1, "EM":1, "BR":1, "CITE":1,
- "DFN":1, "Q":1, "STRONG":1, "IMG":1, "HR":1,
- "TR":1, "TD":1, "TH":1, "CAPTION":1, "THEAD":1, "TFOOT":1,
- "TBODY":1}
- _matchTags = {"TABLE":1, "OL":1, "UL":1, "DL":1, "CENTER":1, "DIV":1, "PRE":1,
- "SUB":1, "SUP":1, "BIG":1, "SMALL":1, "CODE":1,
- "B":1, "I":1, "A":1, "TT":1, "BLOCKQUOTE":1, "U":1,
- "H1":1, "H2":1, "H3":1, "H4":1, "H5":1, "H6":1, "FONT":1}
- _skipTags = {"FORM":1, "HTML":1, "BODY":1, "EMBED":1, "AREA":1, "MAP":1,
- "FRAME":1, "FRAMESET":1, "IFRAME":1, "META":1}
- _stripTags = {"HEAD":1, "JAVA":1, "APPLET":1, "OBJECT":1,
- "JAVASCRIPT":1, "LAYER":1, "STYLE":1, "SCRIPT":1}
-
- def __init__ (self, fp, extra_safe=1, base=None, map_urls=None, new_window=1):
- self._extra_safe = extra_safe
- PassSGMLParser.__init__ (self, fp, extra_safe)
- self._matchDict = {}
- self._stripping = 0
- self._base = base
- self._map_urls = map_urls
- self._new_window = new_window
-
- def safe_start_strip (self):
- if self._stripping == 0:
- self.flush()
- self._stripping = self._stripping + 1
-
- def safe_end_strip (self):
- self.flush()
- self._stripping = self._stripping - 1
- if self._stripping < 0: self._stripping = 0
-
- def write (self, data):
- # sys.stderr.write("write[%d] %s\n" % (self._stripping, data))
- if self._stripping == 0:
- # sys.stderr.write("write %s\n" % data)
- PassSGMLParser.write(self, data)
-
- def cleanup_attrs (self, tag, attrs):
- new_attrs = []
- tag = string.lower(tag)
- if self._new_window and tag == "a":
- new_attrs.append(('target', '_blank'))
- for name, value in attrs:
- name = string.lower(name)
- if name[:2] == "on": continue ## skip any javascript events
- if string.lower(value)[:11] == "javascript:": continue
- if self._map_urls and name in ["action", "href", "src", "lowsrc", "background"] and value[:4] == 'cid:':
- try:
- value = self._map_urls[value[4:]]
- except KeyError:
- pass
- else:
- if self._base and name in ["action", "href", "src", "lowsrc", "background"]:
- value = basejoin (self._base, value)
- if name in ["action", "href", "src", "lowsrc", "background"]:
- value = 'http://www.google.com/url?sa=D&q=%s' % (neo_cgi.urlEscape(value))
- if self._new_window and tag == "a" and name == "target": continue
- new_attrs.append ((name, value))
- return new_attrs
-
- def unknown_starttag(self, tag, attrs):
- tag = string.upper(tag)
- if SafeHtml._stripTags.has_key(tag):
- self.safe_start_strip()
- # sys.stderr.write("Stripping tag %s: %d\n" % (tag, self._stripping))
- elif SafeHtml._skipTags.has_key(tag):
- # sys.stderr.write("Skipping tag %s\n" % tag)
- pass
- elif SafeHtml._matchTags.has_key(tag):
- # sys.stderr.write("Matching tag %s\n" % tag)
- if self._matchDict.has_key(tag):
- self._matchDict[tag] = self._matchDict[tag] + 1
- else:
- self._matchDict[tag] = 1
- self.write_starttag (tag, self.cleanup_attrs(tag, attrs))
- elif SafeHtml._safeTags.has_key(tag):
- # sys.stderr.write("Safe tag %s\n" % tag)
- self.write_starttag (tag, self.cleanup_attrs(tag, attrs))
- elif not self._extra_safe:
- # sys.stderr.write("Other tag %s\n" % tag)
- self.write_starttag (tag, self.cleanup_attrs(tag, attrs))
-
- def unknown_endtag(self, tag):
- tag = string.upper(tag)
- if SafeHtml._stripTags.has_key(tag):
- self.safe_end_strip()
- # sys.stderr.write("End Stripping tag %s: %d\n" % (tag, self._stripping))
- elif self._stripping == 0:
- if SafeHtml._skipTags.has_key(tag):
- pass
- elif SafeHtml._matchTags.has_key(tag):
- if self._matchDict.has_key(tag):
- self._matchDict[tag] = self._matchDict[tag] - 1
- self.write_endtag (tag)
- elif SafeHtml._safeTags.has_key(tag):
- self.write_endtag (tag)
- elif not self._extra_safe:
- self.write_endtag (tag)
-
- def close (self):
- self._stripping = 0
- for tag in self._matchDict.keys():
- if self._matchDict[tag] > 0:
- for x in range (self._matchDict[tag]):
- self.write_endtag(tag)
- PassSGMLParser.close(self)
-
-def SafeHtmlString (s, really_safe=1, map_urls=None):
-# fp = open("/tmp/safe_html.in", "w")
-# fp.write(s)
-# fp.close()
- fp = StringIO()
- parser = SafeHtml(fp, really_safe, map_urls=map_urls)
- parser.feed (s)
- parser.close ()
- s = fp.getvalue()
-# fp = open("/tmp/safe_html.out", "w")
-# fp.write(s)
-# fp.close()
- return s
-
diff --git a/python/examples/base/__init__.py b/python/examples/base/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/python/examples/base/__init__.py
+++ /dev/null
diff --git a/python/examples/base/handle_error.py b/python/examples/base/handle_error.py
deleted file mode 100644
index ba583b3..0000000
--- a/python/examples/base/handle_error.py
+++ /dev/null
@@ -1,103 +0,0 @@
-
-import traceback, sys, string, time, socket, os
-import who_calls
-
-#DUMP_DIR = "/neo/data/bugs"
-DUMP_DIR = "/tmp/bugs"
-
-Warning = "handle_error.Warning"
-
-# levels
-LV_MESSAGE = "LV_MESSAGE"
-LV_WARNING = "LV_WARNING"
-LV_ERROR = "LV_ERROR"
-
-Count = 0
-
-gErrorCount = 0
-DISABLE_DUMP = 0
-
-def exceptionReason():
- return "%s.%s" % (str(sys.exc_type), str(sys.exc_value))
-
-def exceptionString():
- tb_list = traceback.format_exception(sys.exc_type,sys.exc_value,sys.exc_traceback)
- return string.join(tb_list,"")
-
- #### old way
- import StringIO
- ## get the traceback message
- sfp = StringIO.StringIO()
- traceback.print_exc(file=sfp)
- exception = sfp.getvalue()
- sfp.close()
-
- return exception
-
-
-def handleException (msg=None, lvl=LV_ERROR, dump = 1):
- global gErrorCount
- gErrorCount = gErrorCount + 1
-
- tb_list = traceback.format_exception(sys.exc_type,sys.exc_value,sys.exc_traceback)
- if msg:
- sys.stderr.write ("%s\n" % msg)
- else:
- msg = "Unhandled Exception"
-
- sys.stderr.write (string.join(tb_list,""))
- try:
- if dump: dump_bug(lvl, "handleException", msg, string.join(tb_list, ""))
- except:
- handleException("Unable to dump_bug", dump = 0)
-
-def handleWarning (msg=""):
- header = "*** handleWarning: %s\n" % msg
- sys.stderr.write(header)
- tb = who_calls.pretty_who_calls(strip=1) + "\n"
- sys.stderr.write(tb)
-
- try:
- dump_bug(LV_WARNING, "handleException", msg, tb)
- except:
- handleException("Unable to dump_bug", dump = 0)
-
-def checkPaths():
- paths = (DUMP_DIR,
- os.path.join (DUMP_DIR, "tmp"),
- os.path.join (DUMP_DIR, "new"))
- for path in paths:
- if not os.path.isdir(path):
- os.mkdir(path, 0755)
-
-
-def dump_bug (level, etype, msg, location=None, nhdf=None):
- global DISABLE_DUMP
- if DISABLE_DUMP: return
-
- now = int(time.time())
- pid = os.getpid()
-
- import neo_cgi, neo_util
- hdf = neo_util.HDF()
- hdf.setValue("Required.Level", level)
- hdf.setValue("Required.When", str(int(time.time())))
- hdf.setValue("Required.Type", etype)
- hdf.setValue("Required.Title", msg)
- hdf.setValue("Optional.Hostname", socket.gethostname())
- if location:
- hdf.setValue("Optional.Location", location)
-
- for (key, value) in os.environ.items():
- hdf.setValue ("Environ.%s" % key, value)
-
- global Count
- Count = Count + 1
- fname = "%d.%d_%d.%s" % (now, pid, Count, socket.gethostname())
- checkPaths()
-
- tpath = os.path.join (DUMP_DIR, "tmp", fname)
- npath = os.path.join (DUMP_DIR, "new", fname)
- hdf.writeFile(tpath)
- os.rename(tpath, npath)
-
diff --git a/python/examples/base/hdfhelp.py b/python/examples/base/hdfhelp.py
deleted file mode 100755
index d8015dc..0000000
--- a/python/examples/base/hdfhelp.py
+++ /dev/null
@@ -1,262 +0,0 @@
-#!/neo/opt/bin/python
-#
-# Copyright (C) 2001 by Neotonic Software Corporation
-# All Rights Reserved.
-#
-# hdfhelp.py
-#
-# This code makes using odb with Clearsilver as "easy as stealing candy
-# from a baby". - jeske
-#
-# How to use:
-#
-# rows = tbl.fetchAllRows()
-# rows.hdfExport("CGI.rows", hdf_dataset)
-#
-# row = tbl.fetchRow( ('primary_key', value) )
-# row.hdfExport("CGI.row", hdf_dataset)
-#
-# How to setup:
-#
-# # define table
-# class AgentsTable(odb.Table):
-# def _defineRows(self):
-# self.d_addColumn("agent_id",kInteger,None,primarykey = 1,autoincrement = 1)
-# self.d_addColumn("login",kVarString,200,notnull=1)
-# self.d_addColumn("ticket_count",kIncInteger,None)
-#
-# # make sure you return a subclass of hdfhelp.HdfRow
-#
-# def defaultRowClass(self):
-# return hdfhelp.HdfRow
-# def defaultRowListClass(self):
-# return hdfhelp.HdfItemList
-#
-
-import string, os
-import neo_cgi
-import neo_cs
-import neo_util
-import odb
-import time
-
-import UserList
-
-SECS_IN_MIN = 60
-SECS_IN_HOUR = (SECS_IN_MIN * 60)
-SECS_IN_DAY = (SECS_IN_HOUR * 24)
-SECS_IN_WEEK = (SECS_IN_DAY * 7)
-SECS_IN_MONTH = (SECS_IN_DAY * 30)
-
-kYearPos = 0
-kMonthPos = 1
-kDayPos = 2
-kHourPos = 3
-kMinutePos = 4
-kSecondPos = 5
-kWeekdayPos = 6
-kJulianDayPos = 7
-kDSTPos = 8
-
-
-def renderDate(then_time,day=0):
- if then_time is None:
- then_time = 0
- then_time = int(then_time)
- if then_time == 0 or then_time == -1:
- return ""
-
- then_tuple = time.localtime(then_time)
-
- now_tuple = time.localtime(time.time())
-
- if day or (then_tuple[kHourPos]==0 and then_tuple[kMinutePos]==0 and then_tuple[kSecondPos]==0):
- # it's just a date
- if then_tuple[kYearPos] == now_tuple[kYearPos]:
- # no year
- return time.strftime("%m/%d",then_tuple)
- else:
- # add year
- return time.strftime("%m/%d/%Y",then_tuple)
-
- else:
- # it's a full time/date
-
- return time.strftime("%m/%d/%Y %I:%M%p",then_tuple)
-
-class HdfRow(odb.Row):
- def hdfExport(self, prefix, hdf_dataset, *extra, **extranamed):
- skip_fields = extranamed.get("skip_fields", None)
- translate_dict = extranamed.get("translate_dict", None)
- tz = extranamed.get("tz", "US/Pacific")
-
- for col_name,value in self.items():
- if skip_fields and (col_name in skip_fields):
- continue
- try:
- name,col_type,col_options = self._table.getColumnDef(col_name)
- except:
- col_type = odb.kVarString
- col_options = {}
-
- if (value is not None):
- if col_options.get("no_export",0): continue
- if type(value) in [ type(0), type(0L) ]:
- hdf_dataset.setValue(prefix + "." + col_name,"%d" % value)
- elif type(value) == type(1.0):
- if int(value) == value:
- hdf_dataset.setValue(prefix + "." + col_name,"%d" % value)
- else:
- hdf_dataset.setValue(prefix + "." + col_name,"%0.2f" % value)
- else:
- if col_type == odb.kReal:
- log("why are we here with this value: %s" % value)
- if translate_dict:
- for k,v in translate_dict.items():
- value = string.replace(value,k,v)
- hdf_dataset.setValue(prefix + "." + col_name,neo_cgi.htmlEscape(str(value)))
- if col_options.get("int_date",0):
- hdf_dataset.setValue(prefix + "." + col_name + ".string",renderDate(value))
- hdf_dataset.setValue(prefix + "." + col_name + ".day_string",renderDate(value,day=1))
- if value: neo_cgi.exportDate(hdf_dataset, "%s.%s" % (prefix, col_name), tz, value)
-
- if col_options.has_key("enum_values"):
- enum = col_options["enum_values"]
- hdf_dataset.setValue(prefix + "." + col_name + ".enum",
- str(enum.get(value,'')))
-
-class HdfItemList(UserList.UserList):
- def hdfExport(self,prefix,hdf_dataset,*extra,**extranamed):
- export_by = extranamed.get("export_by", None)
- n = 0
- for row in self:
- if export_by is not None:
- n = row[export_by]
- row.hdfExport("%s.%d" % (prefix,n),hdf_dataset,*extra,**extranamed)
- n = n + 1
-
-def setList(hdf, prefix, lst):
- hdf.setValue(prefix+".0", str(len(lst)))
- for n in range(len(lst)):
- hdf.setValue(prefix+".%d" %(n+1), lst[n]);
-
-def getList(hdf, name):
- lst = []
- for n in range(hdf.getIntValue(name,0)):
- lst.append(hdf.getValue(name+".%d" %(n+1), ""))
-
- return lst
-
-def eval_cs(hdf,a_cs_string):
- cs = neo_cs.CS(hdf)
- try:
- cs.parseStr(a_cs_string)
- return cs.render()
- except:
- return "Error in CS tags: %s" % neo_cgi.htmlEscape(repr(a_cs_string))
-
-def childloop(hdf):
- children = []
- if hdf:
- hdf = hdf.child()
- while hdf:
- children.append(hdf)
- hdf = hdf.next()
- return children
-
-# ----------------------------
-
-class HDF_Database(odb.Database):
- def defaultRowClass(self):
- return HdfRow
- def defaultRowListClass(self):
- return HdfItemList
-
-# ----------------------------
-
-
-def loopHDF(hdf, name=None):
- results = []
- if name: o = hdf.getObj(name)
- else: o = hdf
- if o:
- o = o.child()
- while o:
- results.append(o)
- o = o.next()
- return results
-
-
-def loopKVHDF(hdf, name=None):
- results = []
- if name: o = hdf.getObj(name)
- else: o = hdf
- if o:
- o = o.child()
- while o:
- results.append((o.name(), o.value()))
- o = o.next()
- return results
-
-
-class hdf_iterator:
- def __init__(self, hdf):
- self.hdf = hdf
- self.node = None
- if self.hdf:
- self.node = self.hdf.child()
-
- def __iter__(self): return self
-
- def next(self):
- if not self.node:
- raise StopIteration
-
- ret = self.node
- self.node = self.node.next()
-
- return ret
-
-class hdf_kv_iterator(hdf_iterator):
- def next(self):
- if not self.node: raise StopIteration
-
- ret = (self.node.name(), self.node.value())
- self.node = self.node.next()
-
- return ret
-
-class hdf_key_iterator(hdf_iterator):
- def next(self):
- if not self.node: raise StopIteration
-
- ret = self.node.name()
- self.node = self.node.next()
-
- return ret
-
-class hdf_ko_iterator(hdf_iterator):
- def next(self):
- if not self.node: raise StopIteration
-
- ret = (self.node.name(), self.node)
- self.node = self.node.next()
-
- return ret
-
-# ----------------------------
-
-def test():
- import neo_util
- hdf = neo_util.HDF()
- hdf.setValue("foo","1")
- print eval_cs(hdf,"this should say 1 ===> <?cs var:foo ?>")
-
-
-if __name__ == "__main__":
- test()
-
-
-
-
-
diff --git a/python/examples/base/log.py b/python/examples/base/log.py
deleted file mode 100755
index f97dfb0..0000000
--- a/python/examples/base/log.py
+++ /dev/null
@@ -1,130 +0,0 @@
-#!/neo/opt/bin/python
-
-# log.py
-
-import sys, time, string
-
-DEV = "development"
-DEV_UPDATE = "update queries"
-DEV_SELECT = "select queries"
-DEV_REPORT = "report log"
-
-LOGGING_STATUS = {
- DEV : 1,
- DEV_UPDATE : 0,
- DEV_SELECT : 0,
- DEV_REPORT : 0}
-
-tstart = 0
-
-def dlog(when,astr):
- global LOGGING_STATUS
- try:
- if LOGGING_STATUS[when]:
- log(astr)
- except KeyError:
- pass
-
-def tlog(astr):
- global tstart
- t = time.time()
- if tstart == 0:
- tstart = t
- time_stamp = "%5.5f" % (t-tstart)
- if len(astr):
- if astr[-1] == "\n":
- sys.stderr.write("[%s] %s" % (time_stamp, astr))
- else:
- sys.stderr.write("[%s] %s\n" % (time_stamp, astr))
-
-def orig_log(astr):
- if len(astr) > 1024:
- astr = astr[:1024]
-
- t = time.time()
- time_stamp = time.strftime("%m/%d %T", time.localtime(t))
- if len(astr):
- if astr[-1] == "\n":
- sys.stderr.write("[%s] %s" % (time_stamp, astr))
- else:
- sys.stderr.write("[%s] %s\n" % (time_stamp, astr))
- # sys.stderr.flush()
-
-
-#----------------------------------------------------------------------
-# static functions
-
-_gDebug = 0
-_gFileDebug = 0
-
-kBLACK = 0
-kRED = 1
-kGREEN = 2
-kYELLOW = 3
-kBLUE = 4
-kMAGENTA = 5
-kCYAN = 6
-kWHITE = 7
-kBRIGHT = 8
-
-def ansicolor (str, fgcolor = None, bgcolor = None):
- o = ""
- if fgcolor:
- if fgcolor & kBRIGHT:
- bright = ';1'
- else:
- bright = ''
- o = o + '%c[3%d%sm' % (chr(27), fgcolor & 0x7, bright)
- if bgcolor:
- o = o + '%c[4%dm' % (chr(27), bgcolor)
- o = o + str
- if fgcolor or bgcolor:
- o = o + '%c[0m' % (chr(27))
- return o
-
-
-def _log(*args):
- t = time.time()
-
- log_line = ""
-
- log_line = log_line + "[" + time.strftime("%m/%d %T", time.localtime(t)) + "] "
-
- l = []
- for arg in args:
- l.append(str(arg))
- log_line = log_line + string.join(l, " ") + "\n"
-
- sys.stderr.write(log_line)
-
-def warn(*args):
- apply(_log, args)
-
-def warnred(*args):
- args = tuple ([""] + list(args) + [""])
- apply(_log, args)
-
-def log(*args):
- apply(_log, args)
-
-def logred(*args):
- if _gDebug>=1:
- args = tuple ([""] + list(args) + [""])
- apply(_log, args)
-
-def debug(*args):
- if _gDebug>=2: apply(_log, args)
-
-
-def debugfull():
- global _gDebug
- _gDebug = 2
-
-def debugon():
- global _gDebug
- _gDebug = 1
-
-def debugoff():
- global _gDebug
- _gDebug = 0
-
diff --git a/python/examples/base/odb.py b/python/examples/base/odb.py
deleted file mode 100755
index ed3450c..0000000
--- a/python/examples/base/odb.py
+++ /dev/null
@@ -1,1492 +0,0 @@
-#!/usr/bin/env python
-#
-# odb.py
-#
-# Object Database Api
-#
-# Written by David Jeske <jeske@neotonic.com>, 2001/07.
-# Inspired by eGroups' sqldb.py originally written by Scott Hassan circa 1998.
-#
-# Copyright (C) 2001, by David Jeske and Neotonic
-#
-# Goals:
-# - a simple object-like interface to database data
-# - database independent (someday)
-# - relational-style "rigid schema definition"
-# - object style easy-access
-#
-# Example:
-#
-# import odb
-#
-# # define table
-# class AgentsTable(odb.Table):
-# def _defineRows(self):
-# self.d_addColumn("agent_id",kInteger,None,primarykey = 1,autoincrement = 1)
-# self.d_addColumn("login",kVarString,200,notnull=1)
-# self.d_addColumn("ticket_count",kIncInteger,None)
-#
-# if __name__ == "__main__":
-# # open database
-# ndb = MySQLdb.connect(host = 'localhost',
-# user='username',
-# passwd = 'password',
-# db='testdb')
-# db = Database(ndb)
-# tbl = AgentsTable(db,"agents")
-#
-# # create row
-# agent_row = tbl.newRow()
-# agent_row.login = "foo"
-# agent_row.save()
-#
-# # fetch row (must use primary key)
-# try:
-# get_row = tbl.fetchRow( ('agent_id', agent_row.agent_id) )
-# except odb.eNoMatchingRows:
-# print "this is bad, we should have found the row"
-#
-# # fetch rows (can return empty list)
-# list_rows = tbl.fetchRows( ('login', "foo") )
-#
-
-import string
-import sys, zlib
-from log import *
-
-import handle_error
-
-eNoSuchColumn = "odb.eNoSuchColumn"
-eNonUniqueMatchSpec = "odb.eNonUniqueMatchSpec"
-eNoMatchingRows = "odb.eNoMatchingRows"
-eInternalError = "odb.eInternalError"
-eInvalidMatchSpec = "odb.eInvalidMatchSpec"
-eInvalidData = "odb.eInvalidData"
-eUnsavedObjectLost = "odb.eUnsavedObjectLost"
-eDuplicateKey = "odb.eDuplicateKey"
-
-#####################################
-# COLUMN TYPES
-################ ######################
-# typename ####################### size data means:
-# # #
-kInteger = "kInteger" # -
-kFixedString = "kFixedString" # size
-kVarString = "kVarString" # maxsize
-kBigString = "kBigString" # -
-kIncInteger = "kIncInteger" # -
-kDateTime = "kDateTime"
-kTimeStamp = "kTimeStamp"
-kReal = "kReal"
-
-
-DEBUG = 0
-
-##############
-# Database
-#
-# this will ultimately turn into a mostly abstract base class for
-# the DB adaptors for different database types....
-#
-
-class Database:
- def __init__(self, db, debug=0):
- self._tables = {}
- self.db = db
- self._cursor = None
- self.compression_enabled = 0
- self.debug = debug
- self.SQLError = None
-
- self.__defaultRowClass = self.defaultRowClass()
- self.__defaultRowListClass = self.defaultRowListClass()
-
- def defaultCursor(self):
- if self._cursor is None:
- self._cursor = self.db.cursor()
- return self._cursor
-
- def escape(self,str):
- raise "Unimplemented Error"
-
- def getDefaultRowClass(self): return self.__defaultRowClass
- def setDefaultRowClass(self, clss): self.__defaultRowClass = clss
- def getDefaultRowListClass(self): return self.__defaultRowListClass
- def setDefaultRowListClass(self, clss): self.__defaultRowListClass = clss
-
- def defaultRowClass(self):
- return Row
-
- def defaultRowListClass(self):
- # base type is list...
- return list
-
- def addTable(self, attrname, tblname, tblclass,
- rowClass = None, check = 0, create = 0, rowListClass = None):
- tbl = tblclass(self, tblname, rowClass=rowClass, check=check,
- create=create, rowListClass=rowListClass)
- self._tables[attrname] = tbl
- return tbl
-
- def close(self):
- for name, tbl in self._tables.items():
- tbl.db = None
- self._tables = {}
- if self.db is not None:
- self.db.close()
- self.db = None
-
- def __getattr__(self, key):
- if key == "_tables":
- raise AttributeError, "odb.Database: not initialized properly, self._tables does not exist"
-
- try:
- table_dict = getattr(self,"_tables")
- return table_dict[key]
- except KeyError:
- raise AttributeError, "odb.Database: unknown attribute %s" % (key)
-
- def beginTransaction(self, cursor=None):
- if cursor is None:
- cursor = self.defaultCursor()
- dlog(DEV_UPDATE,"begin")
- cursor.execute("begin")
-
- def commitTransaction(self, cursor=None):
- if cursor is None:
- cursor = self.defaultCursor()
- dlog(DEV_UPDATE,"commit")
- cursor.execute("commit")
-
- def rollbackTransaction(self, cursor=None):
- if cursor is None:
- cursor = self.defaultCursor()
- dlog(DEV_UPDATE,"rollback")
- cursor.execute("rollback")
-
- ##
- ## schema creation code
- ##
-
- def createTables(self):
- tables = self.listTables()
-
- for attrname, tbl in self._tables.items():
- tblname = tbl.getTableName()
-
- if tblname not in tables:
- print "table %s does not exist" % tblname
- tbl.createTable()
- else:
- invalidAppCols, invalidDBCols = tbl.checkTable()
-
-## self.alterTableToMatch(tbl)
-
- def createIndices(self):
- indices = self.listIndices()
-
- for attrname, tbl in self._tables.items():
- for indexName, (columns, unique) in tbl.getIndices().items():
- if indexName in indices: continue
-
- tbl.createIndex(columns, indexName=indexName, unique=unique)
-
- def synchronizeSchema(self):
- tables = self.listTables()
-
- for attrname, tbl in self._tables.items():
- tblname = tbl.getTableName()
- self.alterTableToMatch(tbl)
-
- def listTables(self, cursor=None):
- raise "Unimplemented Error"
-
- def listFieldsDict(self, table_name, cursor=None):
- raise "Unimplemented Error"
-
- def listFields(self, table_name, cursor=None):
- columns = self.listFieldsDict(table_name, cursor=cursor)
- return columns.keys()
-
-##########################################
-# Table
-#
-
-
-class Table:
- def subclassinit(self):
- pass
- def __init__(self,database,table_name,
- rowClass = None, check = 0, create = 0, rowListClass = None):
- self.db = database
- self.__table_name = table_name
- if rowClass:
- self.__defaultRowClass = rowClass
- else:
- self.__defaultRowClass = database.getDefaultRowClass()
-
- if rowListClass:
- self.__defaultRowListClass = rowListClass
- else:
- self.__defaultRowListClass = database.getDefaultRowListClass()
-
- # get this stuff ready!
-
- self.__column_list = []
- self.__vcolumn_list = []
- self.__columns_locked = 0
- self.__has_value_column = 0
-
- self.__indices = {}
-
- # this will be used during init...
- self.__col_def_hash = None
- self.__vcol_def_hash = None
- self.__primary_key_list = None
- self.__relations_by_table = {}
-
- # ask the subclass to def his rows
- self._defineRows()
-
- # get ready to run!
- self.__lockColumnsAndInit()
-
- self.subclassinit()
-
- if create:
- self.createTable()
-
- if check:
- self.checkTable()
-
- def _colTypeToSQLType(self, colname, coltype, options):
-
- if coltype == kInteger:
- coltype = "integer"
- elif coltype == kFixedString:
- sz = options.get('size', None)
- if sz is None: coltype = 'char'
- else: coltype = "char(%s)" % sz
- elif coltype == kVarString:
- sz = options.get('size', None)
- if sz is None: coltype = 'varchar'
- else: coltype = "varchar(%s)" % sz
- elif coltype == kBigString:
- coltype = "text"
- elif coltype == kIncInteger:
- coltype = "integer"
- elif coltype == kDateTime:
- coltype = "datetime"
- elif coltype == kTimeStamp:
- coltype = "timestamp"
- elif coltype == kReal:
- coltype = "real"
-
- coldef = "%s %s" % (colname, coltype)
-
- if options.get('notnull', 0): coldef = coldef + " NOT NULL"
- if options.get('autoincrement', 0): coldef = coldef + " AUTO_INCREMENT"
- if options.get('unique', 0): coldef = coldef + " UNIQUE"
-# if options.get('primarykey', 0): coldef = coldef + " primary key"
- if options.get('default', None) is not None: coldef = coldef + " DEFAULT %s" % options.get('default')
-
- return coldef
-
- def getTableName(self): return self.__table_name
- def setTableName(self, tablename): self.__table_name = tablename
-
- def getIndices(self): return self.__indices
-
- def _createTableSQL(self):
- defs = []
- for colname, coltype, options in self.__column_list:
- defs.append(self._colTypeToSQLType(colname, coltype, options))
-
- defs = string.join(defs, ", ")
-
- primarykeys = self.getPrimaryKeyList()
- primarykey_str = ""
- if primarykeys:
- primarykey_str = ", PRIMARY KEY (" + string.join(primarykeys, ",") + ")"
-
- sql = "create table %s (%s %s)" % (self.__table_name, defs, primarykey_str)
- return sql
-
- def createTable(self, cursor=None):
- if cursor is None: cursor = self.db.defaultCursor()
- sql = self._createTableSQL()
- print "CREATING TABLE:", sql
- cursor.execute(sql)
-
- def dropTable(self, cursor=None):
- if cursor is None: cursor = self.db.defaultCursor()
- try:
- cursor.execute("drop table %s" % self.__table_name) # clean out the table
- except self.SQLError, reason:
- pass
-
- def renameTable(self, newTableName, cursor=None):
- if cursor is None: cursor = self.db.defaultCursor()
- try:
- cursor.execute("rename table %s to %s" % (self.__table_name, newTableName))
- except sel.SQLError, reason:
- pass
-
- self.setTableName(newTableName)
-
- def getTableColumnsFromDB(self):
- return self.db.listFieldsDict(self.__table_name)
-
- def checkTable(self, warnflag=1):
- invalidDBCols = {}
- invalidAppCols = {}
-
- dbcolumns = self.getTableColumnsFromDB()
- for coldef in self.__column_list:
- colname = coldef[0]
-
- dbcoldef = dbcolumns.get(colname, None)
- if dbcoldef is None:
- invalidAppCols[colname] = 1
-
- for colname, row in dbcolumns.items():
- coldef = self.__col_def_hash.get(colname, None)
- if coldef is None:
- invalidDBCols[colname] = 1
-
- if warnflag == 1:
- if invalidDBCols:
- print "----- WARNING ------------------------------------------"
- print " There are columns defined in the database schema that do"
- print " not match the application's schema."
- print " columns:", invalidDBCols.keys()
- print "--------------------------------------------------------"
-
- if invalidAppCols:
- print "----- WARNING ------------------------------------------"
- print " There are new columns defined in the application schema"
- print " that do not match the database's schema."
- print " columns:", invalidAppCols.keys()
- print "--------------------------------------------------------"
-
- return invalidAppCols, invalidDBCols
-
-
- def alterTableToMatch(self):
- raise "Unimplemented Error!"
-
- def addIndex(self, columns, indexName=None, unique=0):
- if indexName is None:
- indexName = self.getTableName() + "_index_" + string.join(columns, "_")
-
- self.__indices[indexName] = (columns, unique)
-
- def createIndex(self, columns, indexName=None, unique=0, cursor=None):
- if cursor is None: cursor = self.db.defaultCursor()
- cols = string.join(columns, ",")
-
- if indexName is None:
- indexName = self.getTableName() + "_index_" + string.join(columns, "_")
-
- uniquesql = ""
- if unique:
- uniquesql = " unique"
- sql = "create %s index %s on %s (%s)" % (uniquesql, indexName, self.getTableName(), cols)
- warn("creating index", sql)
- cursor.execute(sql)
-
-
- ## Column Definition
-
- def getColumnDef(self,column_name):
- try:
- return self.__col_def_hash[column_name]
- except KeyError:
- try:
- return self.__vcol_def_hash[column_name]
- except KeyError:
- raise eNoSuchColumn, "no column (%s) on table %s" % (column_name,self.__table_name)
-
- def getColumnList(self):
- return self.__column_list + self.__vcolumn_list
- def getAppColumnList(self): return self.__column_list
-
- def databaseSizeForData_ColumnName_(self,data,col_name):
- try:
- col_def = self.__col_def_hash[col_name]
- except KeyError:
- try:
- col_def = self.__vcol_def_hash[col_name]
- except KeyError:
- raise eNoSuchColumn, "no column (%s) on table %s" % (col_name,self.__table_name)
-
- c_name,c_type,c_options = col_def
-
- if c_type == kBigString:
- if c_options.get("compress_ok",0) and self.db.compression_enabled:
- z_size = len(zlib.compress(data,9))
- r_size = len(data)
- if z_size < r_size:
- return z_size
- else:
- return r_size
- else:
- return len(data)
- else:
- # really simplistic database size computation:
- try:
- a = data[0]
- return len(data)
- except:
- return 4
-
-
- def columnType(self, col_name):
- try:
- col_def = self.__col_def_hash[col_name]
- except KeyError:
- try:
- col_def = self.__vcol_def_hash[col_name]
- except KeyError:
- raise eNoSuchColumn, "no column (%s) on table %s" % (col_name,self.__table_name)
-
- c_name,c_type,c_options = col_def
- return c_type
-
- def convertDataForColumn(self,data,col_name):
- try:
- col_def = self.__col_def_hash[col_name]
- except KeyError:
- try:
- col_def = self.__vcol_def_hash[col_name]
- except KeyError:
- raise eNoSuchColumn, "no column (%s) on table %s" % (col_name,self.__table_name)
-
- c_name,c_type,c_options = col_def
-
- if c_type == kIncInteger:
- raise eInvalidData, "invalid operation for column (%s:%s) on table (%s)" % (col_name,c_type,self.__table_name)
-
- if c_type == kInteger:
- try:
- if data is None: data = 0
- else: return long(data)
- except (ValueError,TypeError):
- raise eInvalidData, "invalid data (%s) for col (%s:%s) on table (%s)" % (repr(data),col_name,c_type,self.__table_name)
- elif c_type == kReal:
- try:
- if data is None: data = 0.0
- else: return float(data)
- except (ValueError,TypeError):
- raise eInvalidData, "invalid data (%s) for col (%s:%s) on table (%s)" % (repr(data), col_name,c_type,self.__table_name)
-
- else:
- if type(data) == type(long(0)):
- return "%d" % data
- else:
- return str(data)
-
- def getPrimaryKeyList(self):
- return self.__primary_key_list
-
- def hasValueColumn(self):
- return self.__has_value_column
-
- def hasColumn(self,name):
- return self.__col_def_hash.has_key(name)
- def hasVColumn(self,name):
- return self.__vcol_def_hash.has_key(name)
-
-
- def _defineRows(self):
- raise "can't instantiate base odb.Table type, make a subclass and override _defineRows()"
-
- def __lockColumnsAndInit(self):
- # add a 'odb_value column' before we lockdown the table def
- if self.__has_value_column:
- self.d_addColumn("odb_value",kBigText,default='')
-
- self.__columns_locked = 1
- # walk column list and make lookup hashes, primary_key_list, etc..
-
- primary_key_list = []
- col_def_hash = {}
- for a_col in self.__column_list:
- name,type,options = a_col
- col_def_hash[name] = a_col
- if options.has_key('primarykey'):
- primary_key_list.append(name)
-
- self.__col_def_hash = col_def_hash
- self.__primary_key_list = primary_key_list
-
- # setup the value columns!
-
- if (not self.__has_value_column) and (len(self.__vcolumn_list) > 0):
- raise "can't define vcolumns on table without ValueColumn, call d_addValueColumn() in your _defineRows()"
-
- vcol_def_hash = {}
- for a_col in self.__vcolumn_list:
- name,type,size_data,options = a_col
- vcol_def_hash[name] = a_col
-
- self.__vcol_def_hash = vcol_def_hash
-
-
- def __checkColumnLock(self):
- if self.__columns_locked:
- raise "can't change column definitions outside of subclass' _defineRows() method!"
-
- # table definition methods, these are only available while inside the
- # subclass's _defineRows method
- #
- # Ex:
- #
- # import odb
- # class MyTable(odb.Table):
- # def _defineRows(self):
- # self.d_addColumn("id",kInteger,primarykey = 1,autoincrement = 1)
- # self.d_addColumn("name",kVarString,120)
- # self.d_addColumn("type",kInteger,
- # enum_values = { 0 : "alive", 1 : "dead" }
-
- def d_addColumn(self,col_name,ctype,size=None,primarykey = 0,
- notnull = 0,indexed=0,
- default=None,unique=0,autoincrement=0,safeupdate=0,
- enum_values = None,
- no_export = 0,
- relations=None,compress_ok=0,int_date=0):
-
- self.__checkColumnLock()
-
- options = {}
- options['default'] = default
- if primarykey:
- options['primarykey'] = primarykey
- if unique:
- options['unique'] = unique
- if indexed:
- options['indexed'] = indexed
- self.addIndex((col_name,))
- if safeupdate:
- options['safeupdate'] = safeupdate
- if autoincrement:
- options['autoincrement'] = autoincrement
- if notnull:
- options['notnull'] = notnull
- if size:
- options['size'] = size
- if no_export:
- options['no_export'] = no_export
- if int_date:
- if ctype != kInteger:
- raise eInvalidData, "can't flag columns int_date unless they are kInteger"
- else:
- options['int_date'] = int_date
-
- if enum_values:
- options['enum_values'] = enum_values
- inv_enum_values = {}
- for k,v in enum_values.items():
- if inv_enum_values.has_key(v):
- raise eInvalidData, "enum_values paramater must be a 1 to 1 mapping for Table(%s)" % self.__table_name
- else:
- inv_enum_values[v] = k
- options['inv_enum_values'] = inv_enum_values
- if relations:
- options['relations'] = relations
- for a_relation in relations:
- table, foreign_column_name = a_relation
- if self.__relations_by_table.has_key(table):
- raise eInvalidData, "multiple relations for the same foreign table are not yet supported"
- self.__relations_by_table[table] = (col_name,foreign_column_name)
- if compress_ok:
- if ctype == kBigString:
- options['compress_ok'] = 1
- else:
- raise eInvalidData, "only kBigString fields can be compress_ok=1"
-
- self.__column_list.append( (col_name,ctype,options) )
-
- def d_addValueColumn(self):
- self.__checkColumnLock()
- self.__has_value_column = 1
-
- def d_addVColumn(self,col_name,type,size=None,default=None):
- self.__checkColumnLock()
-
- if (not self.__has_value_column):
- raise "can't define VColumns on table without ValueColumn, call d_addValueColumn() first"
-
- options = {}
- if default:
- options['default'] = default
- if size:
- options['size'] = size
-
- self.__vcolumn_list.append( (col_name,type,options) )
-
- #####################
- # _checkColMatchSpec(col_match_spec,should_match_unique_row = 0)
- #
- # raise an error if the col_match_spec contains invalid columns, or
- # (in the case of should_match_unique_row) if it does not fully specify
- # a unique row.
- #
- # NOTE: we don't currently support where clauses with value column fields!
- #
-
- def _fixColMatchSpec(self,col_match_spec, should_match_unique_row = 0):
- if type(col_match_spec) == type([]):
- if type(col_match_spec[0]) != type((0,)):
- raise eInvalidMatchSpec, "invalid types in match spec, use [(,)..] or (,)"
- elif type(col_match_spec) == type((0,)):
- col_match_spec = [ col_match_spec ]
- elif type(col_match_spec) == type(None):
- if should_match_unique_row:
- raise eNonUniqueMatchSpec, "can't use a non-unique match spec (%s) here" % col_match_spec
- else:
- return None
- else:
- raise eInvalidMatchSpec, "invalid types in match spec, use [(,)..] or (,)"
-
- if should_match_unique_row:
- unique_column_lists = []
-
- # first the primary key list
- my_primary_key_list = []
- for a_key in self.__primary_key_list:
- my_primary_key_list.append(a_key)
-
- # then other unique keys
- for a_col in self.__column_list:
- col_name,a_type,options = a_col
- if options.has_key('unique'):
- unique_column_lists.append( (col_name, [col_name]) )
-
- unique_column_lists.append( ('primary_key', my_primary_key_list) )
-
-
- new_col_match_spec = []
- for a_col in col_match_spec:
- name,val = a_col
- # newname = string.lower(name)
- # what is this doing?? - jeske
- newname = name
- if not self.__col_def_hash.has_key(newname):
- raise eNoSuchColumn, "no such column in match spec: '%s'" % newname
-
- new_col_match_spec.append( (newname,val) )
-
- if should_match_unique_row:
- for name,a_list in unique_column_lists:
- try:
- a_list.remove(newname)
- except ValueError:
- # it's okay if they specify too many columns!
- pass
-
- if should_match_unique_row:
- for name,a_list in unique_column_lists:
- if len(a_list) == 0:
- # we matched at least one unique colum spec!
- # log("using unique column (%s) for query %s" % (name,col_match_spec))
- return new_col_match_spec
-
- raise eNonUniqueMatchSpec, "can't use a non-unique match spec (%s) here" % col_match_spec
-
- return new_col_match_spec
-
- def __buildWhereClause (self, col_match_spec,other_clauses = None):
- sql_where_list = []
-
- if not col_match_spec is None:
- for m_col in col_match_spec:
- m_col_name,m_col_val = m_col
- c_name,c_type,c_options = self.__col_def_hash[m_col_name]
- if c_type in (kIncInteger, kInteger):
- try:
- m_col_val_long = long(m_col_val)
- except ValueError:
- raise ValueError, "invalid literal for long(%s) in table %s" % (repr(m_col_val),self.__table_name)
-
- sql_where_list.append("%s = %d" % (c_name, m_col_val_long))
- elif c_type == kReal:
- try:
- m_col_val_float = float(m_col_val)
- except ValueError:
- raise ValueError, "invalid literal for float(%s) is table %s" % (repr(m_col_val), self.__table_name)
- sql_where_list.append("%s = %s" % (c_name, m_col_val_float))
- else:
- sql_where_list.append("%s = '%s'" % (c_name, self.db.escape(m_col_val)))
-
- if other_clauses is None:
- pass
- elif type(other_clauses) == type(""):
- sql_where_list = sql_where_list + [other_clauses]
- elif type(other_clauses) == type([]):
- sql_where_list = sql_where_list + other_clauses
- else:
- raise eInvalidData, "unknown type of extra where clause: %s" % repr(other_clauses)
-
- return sql_where_list
-
- def __fetchRows(self,col_match_spec,cursor = None, where = None, order_by = None, limit_to = None,
- skip_to = None, join = None):
- if cursor is None:
- cursor = self.db.defaultCursor()
-
- # build column list
- sql_columns = []
- for name,t,options in self.__column_list:
- sql_columns.append(name)
-
- # build join information
-
- joined_cols = []
- joined_cols_hash = {}
- join_clauses = []
- if not join is None:
- for a_table,retrieve_foreign_cols in join:
- try:
- my_col,foreign_col = self.__relations_by_table[a_table]
- for a_col in retrieve_foreign_cols:
- full_col_name = "%s.%s" % (my_col,a_col)
- joined_cols_hash[full_col_name] = 1
- joined_cols.append(full_col_name)
- sql_columns.append( full_col_name )
-
- join_clauses.append(" left join %s as %s on %s=%s " % (a_table,my_col,my_col,foreign_col))
-
- except KeyError:
- eInvalidJoinSpec, "can't find table %s in defined relations for %s" % (a_table,self.__table_name)
-
- # start buildling SQL
- sql = "select %s from %s" % (string.join(sql_columns,","),
- self.__table_name)
-
- # add join clause
- if join_clauses:
- sql = sql + string.join(join_clauses," ")
-
- # add where clause elements
- sql_where_list = self.__buildWhereClause (col_match_spec,where)
- if sql_where_list:
- sql = sql + " where %s" % (string.join(sql_where_list," and "))
-
- # add order by clause
- if order_by:
- sql = sql + " order by %s " % string.join(order_by,",")
-
- # add limit
- if not limit_to is None:
- if not skip_to is None:
-# log("limit,skip = %s,%s" % (limit_to,skip_to))
- if self.db.db.__module__ == "sqlite.main":
- sql = sql + " limit %s offset %s " % (limit_to,skip_to)
- else:
- sql = sql + " limit %s, %s" % (skip_to,limit_to)
- else:
- sql = sql + " limit %s" % limit_to
- else:
- if not skip_to is None:
- raise eInvalidData, "can't specify skip_to without limit_to in MySQL"
-
- dlog(DEV_SELECT,sql)
- cursor.execute(sql)
-
- # create defaultRowListClass instance...
- return_rows = self.__defaultRowListClass()
-
- # should do fetchmany!
- all_rows = cursor.fetchall()
- for a_row in all_rows:
- data_dict = {}
-
- col_num = 0
-
- # for a_col in cursor.description:
- # (name,type_code,display_size,internal_size,precision,scale,null_ok) = a_col
- for name in sql_columns:
- if self.__col_def_hash.has_key(name) or joined_cols_hash.has_key(name):
- # only include declared columns!
- if self.__col_def_hash.has_key(name):
- c_name,c_type,c_options = self.__col_def_hash[name]
- if c_type == kBigString and c_options.get("compress_ok",0) and a_row[col_num]:
- try:
- a_col_data = zlib.decompress(a_row[col_num])
- except zlib.error:
- a_col_data = a_row[col_num]
-
- data_dict[name] = a_col_data
- elif c_type == kInteger or c_type == kIncInteger:
- value = a_row[col_num]
- if not value is None:
- data_dict[name] = int(value)
- else:
- data_dict[name] = None
- else:
- data_dict[name] = a_row[col_num]
-
- else:
- data_dict[name] = a_row[col_num]
-
- col_num = col_num + 1
-
- newrowobj = self.__defaultRowClass(self,data_dict,joined_cols = joined_cols)
- return_rows.append(newrowobj)
-
-
-
- return return_rows
-
- def __deleteRow(self,a_row,cursor = None):
- if cursor is None:
- cursor = self.db.defaultCursor()
-
- # build the where clause!
- match_spec = a_row.getPKMatchSpec()
- sql_where_list = self.__buildWhereClause (match_spec)
-
- sql = "delete from %s where %s" % (self.__table_name,
- string.join(sql_where_list," and "))
- dlog(DEV_UPDATE,sql)
- cursor.execute(sql)
-
-
- def __updateRowList(self,a_row_list,cursor = None):
- if cursor is None:
- cursor = self.db.defaultCursor()
-
- for a_row in a_row_list:
- update_list = a_row.changedList()
-
- # build the set list!
- sql_set_list = []
- for a_change in update_list:
- col_name,col_val,col_inc_val = a_change
- c_name,c_type,c_options = self.__col_def_hash[col_name]
-
- if c_type != kIncInteger and col_val is None:
- sql_set_list.append("%s = NULL" % c_name)
- elif c_type == kIncInteger and col_inc_val is None:
- sql_set_list.append("%s = 0" % c_name)
- else:
- if c_type == kInteger:
- sql_set_list.append("%s = %d" % (c_name, long(col_val)))
- elif c_type == kIncInteger:
- sql_set_list.append("%s = %s + %d" % (c_name,c_name,long(col_inc_val)))
- elif c_type == kBigString and c_options.get("compress_ok",0) and self.db.compression_enabled:
- compressed_data = zlib.compress(col_val,9)
- if len(compressed_data) < len(col_val):
- sql_set_list.append("%s = '%s'" % (c_name, self.db.escape(compressed_data)))
- else:
- sql_set_list.append("%s = '%s'" % (c_name, self.db.escape(col_val)))
- elif c_type == kReal:
- sql_set_list.append("%s = %s" % (c_name,float(col_val)))
-
- else:
- sql_set_list.append("%s = '%s'" % (c_name, self.db.escape(col_val)))
-
- # build the where clause!
- match_spec = a_row.getPKMatchSpec()
- sql_where_list = self.__buildWhereClause (match_spec)
-
- if sql_set_list:
- sql = "update %s set %s where %s" % (self.__table_name,
- string.join(sql_set_list,","),
- string.join(sql_where_list," and "))
-
- dlog(DEV_UPDATE,sql)
- try:
- cursor.execute(sql)
- except Exception, reason:
- if string.find(str(reason), "Duplicate entry") != -1:
- raise eDuplicateKey, reason
- raise Exception, reason
- a_row.markClean()
-
- def __insertRow(self,a_row_obj,cursor = None,replace=0):
- if cursor is None:
- cursor = self.db.defaultCursor()
-
- sql_col_list = []
- sql_data_list = []
- auto_increment_column_name = None
-
- for a_col in self.__column_list:
- name,type,options = a_col
-
- try:
- data = a_row_obj[name]
-
- sql_col_list.append(name)
- if data is None:
- sql_data_list.append("NULL")
- else:
- if type == kInteger or type == kIncInteger:
- sql_data_list.append("%d" % data)
- elif type == kBigString and options.get("compress_ok",0) and self.db.compression_enabled:
- compressed_data = zlib.compress(data,9)
- if len(compressed_data) < len(data):
- sql_data_list.append("'%s'" % self.db.escape(compressed_data))
- else:
- sql_data_list.append("'%s'" % self.db.escape(data))
- elif type == kReal:
- sql_data_list.append("%s" % data)
- else:
- sql_data_list.append("'%s'" % self.db.escape(data))
-
- except KeyError:
- if options.has_key("autoincrement"):
- if auto_increment_column_name:
- raise eInternalError, "two autoincrement columns (%s,%s) in table (%s)" % (auto_increment_column_name, name,self.__table_name)
- else:
- auto_increment_column_name = name
-
- if replace:
- sql = "replace into %s (%s) values (%s)" % (self.__table_name,
- string.join(sql_col_list,","),
- string.join(sql_data_list,","))
- else:
- sql = "insert into %s (%s) values (%s)" % (self.__table_name,
- string.join(sql_col_list,","),
- string.join(sql_data_list,","))
-
- dlog(DEV_UPDATE,sql)
- try:
- cursor.execute(sql)
- except Exception, reason:
- # sys.stderr.write("errror in statement: " + sql + "\n")
- log("error in statement: " + sql + "\n")
- if string.find(str(reason), "Duplicate entry") != -1:
- raise eDuplicateKey, reason
- raise Exception, reason
-
- if auto_increment_column_name:
- if cursor.__module__ == "sqlite.main":
- a_row_obj[auto_increment_column_name] = cursor.lastrowid
- elif cursor.__module__ == "MySQLdb.cursors":
- a_row_obj[auto_increment_column_name] = cursor.insert_id()
- else:
- # fallback to acting like mysql
- a_row_obj[auto_increment_column_name] = cursor.insert_id()
-
- # ----------------------------------------------------
- # Helper methods for Rows...
- # ----------------------------------------------------
-
-
-
- #####################
- # r_deleteRow(a_row_obj,cursor = None)
- #
- # normally this is called from within the Row "delete()" method
- # but you can call it yourself if you want
- #
-
- def r_deleteRow(self,a_row_obj, cursor = None):
- curs = cursor
- self.__deleteRow(a_row_obj, cursor = curs)
-
-
- #####################
- # r_updateRow(a_row_obj,cursor = None)
- #
- # normally this is called from within the Row "save()" method
- # but you can call it yourself if you want
- #
-
- def r_updateRow(self,a_row_obj, cursor = None):
- curs = cursor
- self.__updateRowList([a_row_obj], cursor = curs)
-
- #####################
- # InsertRow(a_row_obj,cursor = None)
- #
- # normally this is called from within the Row "save()" method
- # but you can call it yourself if you want
- #
-
- def r_insertRow(self,a_row_obj, cursor = None,replace=0):
- curs = cursor
- self.__insertRow(a_row_obj, cursor = curs,replace=replace)
-
-
- # ----------------------------------------------------
- # Public Methods
- # ----------------------------------------------------
-
-
-
- #####################
- # deleteRow(col_match_spec)
- #
- # The col_match_spec paramaters must include all primary key columns.
- #
- # Ex:
- # a_row = tbl.fetchRow( ("order_id", 1) )
- # a_row = tbl.fetchRow( [ ("order_id", 1), ("enterTime", now) ] )
-
-
- def deleteRow(self,col_match_spec, where=None):
- n_match_spec = self._fixColMatchSpec(col_match_spec)
- cursor = self.db.defaultCursor()
-
- # build sql where clause elements
- sql_where_list = self.__buildWhereClause (n_match_spec,where)
- if not sql_where_list:
- return
-
- sql = "delete from %s where %s" % (self.__table_name, string.join(sql_where_list," and "))
-
- dlog(DEV_UPDATE,sql)
- cursor.execute(sql)
-
- #####################
- # fetchRow(col_match_spec)
- #
- # The col_match_spec paramaters must include all primary key columns.
- #
- # Ex:
- # a_row = tbl.fetchRow( ("order_id", 1) )
- # a_row = tbl.fetchRow( [ ("order_id", 1), ("enterTime", now) ] )
-
-
- def fetchRow(self, col_match_spec, cursor = None):
- n_match_spec = self._fixColMatchSpec(col_match_spec, should_match_unique_row = 1)
-
- rows = self.__fetchRows(n_match_spec, cursor = cursor)
- if len(rows) == 0:
- raise eNoMatchingRows, "no row matches %s" % repr(n_match_spec)
-
- if len(rows) > 1:
- raise eInternalError, "unique where clause shouldn't return > 1 row"
-
- return rows[0]
-
-
- #####################
- # fetchRows(col_match_spec)
- #
- # Ex:
- # a_row_list = tbl.fetchRows( ("order_id", 1) )
- # a_row_list = tbl.fetchRows( [ ("order_id", 1), ("enterTime", now) ] )
-
-
- def fetchRows(self, col_match_spec = None, cursor = None,
- where = None, order_by = None, limit_to = None,
- skip_to = None, join = None):
- n_match_spec = self._fixColMatchSpec(col_match_spec)
-
- return self.__fetchRows(n_match_spec,
- cursor = cursor,
- where = where,
- order_by = order_by,
- limit_to = limit_to,
- skip_to = skip_to,
- join = join)
-
- def fetchRowCount (self, col_match_spec = None,
- cursor = None, where = None):
- n_match_spec = self._fixColMatchSpec(col_match_spec)
- sql_where_list = self.__buildWhereClause (n_match_spec,where)
- sql = "select count(*) from %s" % self.__table_name
- if sql_where_list:
- sql = "%s where %s" % (sql,string.join(sql_where_list," and "))
- if cursor is None:
- cursor = self.db.defaultCursor()
- dlog(DEV_SELECT,sql)
- cursor.execute(sql)
- try:
- count, = cursor.fetchone()
- except TypeError:
- count = 0
- return count
-
-
- #####################
- # fetchAllRows()
- #
- # Ex:
- # a_row_list = tbl.fetchRows( ("order_id", 1) )
- # a_row_list = tbl.fetchRows( [ ("order_id", 1), ("enterTime", now) ] )
-
- def fetchAllRows(self):
- try:
- return self.__fetchRows([])
- except eNoMatchingRows:
- # else return empty list...
- return self.__defaultRowListClass()
-
- def newRow(self,replace=0):
- row = self.__defaultRowClass(self,None,create=1,replace=replace)
- for (cname, ctype, opts) in self.__column_list:
- if opts['default'] is not None and ctype is not kIncInteger:
- row[cname] = opts['default']
- return row
-
-class Row:
- __instance_data_locked = 0
- def subclassinit(self):
- pass
- def __init__(self,_table,data_dict,create=0,joined_cols = None,replace=0):
-
- self._inside_getattr = 0 # stop recursive __getattr__
- self._table = _table
- self._should_insert = create or replace
- self._should_replace = replace
- self._rowInactive = None
- self._joinedRows = []
-
- self.__pk_match_spec = None
- self.__vcoldata = {}
- self.__inc_coldata = {}
-
- self.__joined_cols_dict = {}
- for a_col in joined_cols or []:
- self.__joined_cols_dict[a_col] = 1
-
- if create:
- self.__coldata = {}
- else:
- if type(data_dict) != type({}):
- raise eInternalError, "rowdict instantiate with bad data_dict"
- self.__coldata = data_dict
- self.__unpackVColumn()
-
- self.markClean()
-
- self.subclassinit()
- self.__instance_data_locked = 1
-
- def joinRowData(self,another_row):
- self._joinedRows.append(another_row)
-
- def getPKMatchSpec(self):
- return self.__pk_match_spec
-
- def markClean(self):
- self.__vcolchanged = 0
- self.__colchanged_dict = {}
-
- for key in self.__inc_coldata.keys():
- self.__coldata[key] = self.__coldata.get(key, 0) + self.__inc_coldata[key]
-
- self.__inc_coldata = {}
-
- if not self._should_insert:
- # rebuild primary column match spec
- new_match_spec = []
- for col_name in self._table.getPrimaryKeyList():
- try:
- rdata = self[col_name]
- except KeyError:
- raise eInternalError, "must have primary key data filled in to save %s:Row(col:%s)" % (self._table.getTableName(),col_name)
-
- new_match_spec.append( (col_name, rdata) )
- self.__pk_match_spec = new_match_spec
-
- def __unpackVColumn(self):
- if self._table.hasValueColumn():
- pass
-
- def __packVColumn(self):
- if self._table.hasValueColumn():
- pass
-
- ## ----- utility stuff ----------------------------------
-
- def __del__(self):
- # check for unsaved changes
- changed_list = self.changedList()
- if len(changed_list):
- info = "unsaved Row for table (%s) lost, call discard() to avoid this error. Lost changes: %s\n" % (self._table.getTableName(), repr(changed_list)[:256])
- if 0:
- raise eUnsavedObjectLost, info
- else:
- sys.stderr.write(info)
-
-
- def __repr__(self):
- return "Row from (%s): %s" % (self._table.getTableName(),repr(self.__coldata) + repr(self.__vcoldata))
-
- ## ---- class emulation --------------------------------
-
- def __getattr__(self,key):
- if self._inside_getattr:
- raise AttributeError, "recursively called __getattr__ (%s,%s)" % (key,self._table.getTableName())
- try:
- self._inside_getattr = 1
- try:
- return self[key]
- except KeyError:
- if self._table.hasColumn(key) or self._table.hasVColumn(key):
- return None
- else:
- raise AttributeError, "unknown field '%s' in Row(%s)" % (key,self._table.getTableName())
- finally:
- self._inside_getattr = 0
-
- def __setattr__(self,key,val):
- if not self.__instance_data_locked:
- self.__dict__[key] = val
- else:
- my_dict = self.__dict__
- if my_dict.has_key(key):
- my_dict[key] = val
- else:
- # try and put it into the rowdata
- try:
- self[key] = val
- except KeyError, reason:
- raise AttributeError, reason
-
-
- ## ---- dict emulation ---------------------------------
-
- def __getitem__(self,key):
- self.checkRowActive()
-
- try:
- c_type = self._table.columnType(key)
- except eNoSuchColumn, reason:
- # Ugh, this sucks, we can't determine the type for a joined
- # row, so we just default to kVarString and let the code below
- # determine if this is a joined column or not
- c_type = kVarString
-
- if c_type == kIncInteger:
- c_data = self.__coldata.get(key, 0)
- if c_data is None: c_data = 0
- i_data = self.__inc_coldata.get(key, 0)
- if i_data is None: i_data = 0
- return c_data + i_data
-
- try:
- return self.__coldata[key]
- except KeyError:
- try:
- return self.__vcoldata[key]
- except KeyError:
- for a_joined_row in self._joinedRows:
- try:
- return a_joined_row[key]
- except KeyError:
- pass
-
- raise KeyError, "unknown column %s in %s" % (key,self)
-
- def __setitem__(self,key,data):
- self.checkRowActive()
-
- try:
- newdata = self._table.convertDataForColumn(data,key)
- except eNoSuchColumn, reason:
- raise KeyError, reason
-
- if self._table.hasColumn(key):
- self.__coldata[key] = newdata
- self.__colchanged_dict[key] = 1
- elif self._table.hasVColumn(key):
- self.__vcoldata[key] = newdata
- self.__vcolchanged = 1
- else:
- for a_joined_row in self._joinedRows:
- try:
- a_joined_row[key] = data
- return
- except KeyError:
- pass
- raise KeyError, "unknown column name %s" % key
-
- def __delitem__(self,key,data):
- self.checkRowActive()
-
- if self.table.hasVColumn(key):
- del self.__vcoldata[key]
- else:
- for a_joined_row in self._joinedRows:
- try:
- del a_joined_row[key]
- return
- except KeyError:
- pass
- raise KeyError, "unknown column name %s" % key
-
-
- def copyFrom(self,source):
- for name,t,options in self._table.getColumnList():
- if not options.has_key("autoincrement"):
- self[name] = source[name]
-
-
- # make sure that .keys(), and .items() come out in a nice order!
-
- def keys(self):
- self.checkRowActive()
-
- key_list = []
- for name,t,options in self._table.getColumnList():
- key_list.append(name)
- for name in self.__joined_cols_dict.keys():
- key_list.append(name)
-
- for a_joined_row in self._joinedRows:
- key_list = key_list + a_joined_row.keys()
-
- return key_list
-
-
- def items(self):
- self.checkRowActive()
-
- item_list = []
- for name,t,options in self._table.getColumnList():
- item_list.append( (name,self[name]) )
- for name in self.__joined_cols_dict.keys():
- item_list.append( (name,self[name]) )
-
- for a_joined_row in self._joinedRows:
- item_list = item_list + a_joined_row.items()
-
-
- return item_list
-
- def values(elf):
- self.checkRowActive()
-
- value_list = self.__coldata.values() + self.__vcoldata.values()
-
- for a_joined_row in self._joinedRows:
- value_list = value_list + a_joined_row.values()
-
- return value_list
-
-
- def __len__(self):
- self.checkRowActive()
-
- my_len = len(self.__coldata) + len(self.__vcoldata)
-
- for a_joined_row in self._joinedRows:
- my_len = my_len + len(a_joined_row)
-
- return my_len
-
- def has_key(self,key):
- self.checkRowActive()
-
- if self.__coldata.has_key(key) or self.__vcoldata.has_key(key):
- return 1
- else:
-
- for a_joined_row in self._joinedRows:
- if a_joined_row.has_key(key):
- return 1
- return 0
-
- def get(self,key,default = None):
- self.checkRowActive()
-
-
-
- if self.__coldata.has_key(key):
- return self.__coldata[key]
- elif self.__vcoldata.has_key(key):
- return self.__vcoldata[key]
- else:
- for a_joined_row in self._joinedRows:
- try:
- return a_joined_row.get(key,default)
- except eNoSuchColumn:
- pass
-
- if self._table.hasColumn(key):
- return default
-
- raise eNoSuchColumn, "no such column %s" % key
-
- def inc(self,key,count=1):
- self.checkRowActive()
-
- if self._table.hasColumn(key):
- try:
- self.__inc_coldata[key] = self.__inc_coldata[key] + count
- except KeyError:
- self.__inc_coldata[key] = count
-
- self.__colchanged_dict[key] = 1
- else:
- raise AttributeError, "unknown field '%s' in Row(%s)" % (key,self._table.getTableName())
-
-
- ## ----------------------------------
- ## real interface
-
-
- def fillDefaults(self):
- for field_def in self._table.fieldList():
- name,type,size,options = field_def
- if options.has_key("default"):
- self[name] = options["default"]
-
- ###############
- # changedList()
- #
- # returns a list of tuples for the columns which have changed
- #
- # changedList() -> [ ('name', 'fred'), ('age', 20) ]
-
- def changedList(self):
- if self.__vcolchanged:
- self.__packVColumn()
-
- changed_list = []
- for a_col in self.__colchanged_dict.keys():
- changed_list.append( (a_col,self.get(a_col,None),self.__inc_coldata.get(a_col,None)) )
-
- return changed_list
-
- def discard(self):
- self.__coldata = None
- self.__vcoldata = None
- self.__colchanged_dict = {}
- self.__vcolchanged = 0
-
- def delete(self,cursor = None):
- self.checkRowActive()
-
-
- fromTable = self._table
- curs = cursor
- fromTable.r_deleteRow(self,cursor=curs)
- self._rowInactive = "deleted"
-
- def save(self,cursor = None):
- toTable = self._table
-
- self.checkRowActive()
-
- if self._should_insert:
- toTable.r_insertRow(self,replace=self._should_replace)
- self._should_insert = 0
- self._should_replace = 0
- self.markClean() # rebuild the primary key list
- else:
- curs = cursor
- toTable.r_updateRow(self,cursor = curs)
-
- # the table will mark us clean!
- # self.markClean()
-
- def checkRowActive(self):
- if self._rowInactive:
- raise eInvalidData, "row is inactive: %s" % self._rowInactive
-
- def databaseSizeForColumn(self,key):
- return self._table.databaseSizeForData_ColumnName_(self[key],key)
-
-
-if __name__ == "__main__":
- print "run odb_test.py"
diff --git a/python/examples/base/odb_mysql.py b/python/examples/base/odb_mysql.py
deleted file mode 100755
index d68a924..0000000
--- a/python/examples/base/odb_mysql.py
+++ /dev/null
@@ -1,72 +0,0 @@
-#! /usr/bin/env python
-
-"""
-usage: %(progname)s [args]
-"""
-
-
-# import startscript; startscript.init(__name__)
-import os, sys, string, time, getopt
-from log import *
-
-import odb
-import MySQLdb
-
-class Database(odb.Database):
- def __init__(self,db, debug=0):
- odb.Database.__init__(self, db, debug=debug)
- self.SQLError = MySQLdb.Error
-
- def escape(self,str):
- if str is None: return None
- return MySQLdb.escape_string(str)
-
- def listTables(self, cursor=None):
- if cursor is None: cursor = self.defaultCursor()
- cursor.execute("show tables")
- rows = cursor.fetchall()
- tables = []
- for row in rows:
- tables.append(row[0])
- return tables
-
- def listIndices(self, cursor=None):
- return []
-
- def listFieldsDict(self, table_name, cursor=None):
- if cursor is None: cursor = self.defaultCursor()
- sql = "show columns from %s" % table_name
- cursor.execute(sql)
- rows = cursor.fetchall()
-
- columns = {}
- for row in rows:
- colname = row[0]
- columns[colname] = row
-
- return columns
-
- def alterTableToMatch(self):
- invalidAppCols, invalidDBCols = self.checkTable()
- if not invalidAppCols: return
-
- defs = []
- for colname in invalidAppCols.keys():
- col = self.getColumnDef(colname)
- colname = col[0]
- coltype = col[1]
- options = col[2]
- defs.append(self.colTypeToSQLType(colname, coltype, options))
-
- defs = string.join(defs, ", ")
-
- sql = "alter table %s add column " % self.getTableName()
- sql = sql + "(" + defs + ")"
-
- print sql
-
- cur = self.db.defaultCursor()
- cur.execute(sql)
-
-
-
diff --git a/python/examples/base/odb_sqlite.py b/python/examples/base/odb_sqlite.py
deleted file mode 100755
index 2d98179..0000000
--- a/python/examples/base/odb_sqlite.py
+++ /dev/null
@@ -1,171 +0,0 @@
-#! /usr/bin/env python
-
-"""
-usage: %(progname)s [args]
-"""
-
-
-import os, sys, string, time, getopt
-from log import *
-
-import odb
-import sqlite
-
-import re
-
-# --- these are using for removing nulls from strings
-# --- because sqlite can't handle them
-
-def escape_string(str):
- def subfn(m):
- c = m.group(0)
- return "%%%02X" % ord(c)
-
- return re.sub("('|\0|%)",subfn,str)
-
-def unescape_string(str):
- def subfn(m):
- hexnum = int(m.group(1),16)
- return "%c" % hexnum
- return re.sub("%(..)",subfn,str)
-
-class Database(odb.Database):
- def __init__(self,db, debug=0):
- odb.Database.__init__(self, db, debug=debug)
- self.SQLError = sqlite.Error
-
- def escape(self,str):
- if str is None:
- return None
- elif type(str) == type(""):
- return string.replace(str,"'","''")
- elif type(str) == type(1):
- return str
- else:
- raise "unknown column data type: %s" % type(str)
-
-
- def listTables(self, cursor=None):
- if cursor is None: cursor = self.defaultCursor()
- cursor.execute("select name from sqlite_master where type='table'")
- rows = cursor.fetchall()
- tables = []
- for row in rows: tables.append(row[0])
- return tables
-
- def listIndices(self, cursor=None):
- if cursor is None: cursor = self.defaultCursor()
- cursor.execute("select name from sqlite_master where type='index'")
- rows = cursor.fetchall()
- tables = []
- for row in rows: tables.append(row[0])
- return tables
-
- def listFieldsDict(self, table_name, cursor=None):
- if cursor is None: cursor = self.defaultCursor()
- sql = "pragma table_info(%s)" % table_name
- cursor.execute(sql)
- rows = cursor.fetchall()
-
- columns = {}
- for row in rows:
- colname = row[1]
- columns[colname] = row
- return columns
-
- def _tableCreateStatement(self, table_name, cursor=None):
- if cursor is None: cursor = self.defaultCursor()
- sql = "select sql from sqlite_master where type='table' and name='%s'" % table_name
- print sql
- cursor.execute(sql)
- row = cursor.fetchone()
- sqlstatement = row[0]
- return sqlstatement
-
-
- def alterTableToMatch(self, table):
- tableName = table.getTableName()
- tmpTableName = tableName + "_" + str(os.getpid())
-
-
- invalidAppCols, invalidDBCols = table.checkTable(warnflag=0)
-
-## if invalidAppCols or invalidDBCols:
-## return
-
- if not invalidAppCols and not invalidDBCols:
- return
-
-
- oldcols = self.listFieldsDict(tableName)
-# tmpcols = oldcols.keys()
-
- tmpcols = []
- newcols = table.getAppColumnList()
- for colname, coltype, options in newcols:
- if oldcols.has_key(colname): tmpcols.append(colname)
-
- tmpcolnames = string.join(tmpcols, ",")
-
- statements = []
-
- sql = "begin transaction"
- statements.append(sql)
-
- sql = "create temporary table %s (%s)" % (tmpTableName, tmpcolnames)
- statements.append(sql)
-
- sql = "insert into %s select %s from %s" % (tmpTableName, tmpcolnames, tableName)
- statements.append(sql)
-
- sql = "drop table %s" % tableName
- statements.append(sql)
-
- sql = table._createTableSQL()
- statements.append(sql)
-
- sql = "insert into %s(%s) select %s from %s" % (tableName, tmpcolnames, tmpcolnames, tmpTableName)
- statements.append(sql)
-
- sql = "drop table %s" % tmpTableName
- statements.append(sql)
-
- sql = "commit"
- statements.append(sql)
-
- cur = self.defaultCursor()
- for statement in statements:
-# print statement
- cur.execute(statement)
-
-
-def test():
- pass
-
-def usage(progname):
- print __doc__ % vars()
-
-def main(argv, stdout, environ):
- progname = argv[0]
- optlist, args = getopt.getopt(argv[1:], "", ["help", "test", "debug"])
-
- testflag = 0
- if len(args) == 0:
- usage(progname)
- return
- for (field, val) in optlist:
- if field == "--help":
- usage(progname)
- return
- elif field == "--debug":
- debugfull()
- elif field == "--test":
- testflag = 1
-
- if testflag:
- test()
- return
-
-
-if __name__ == "__main__":
- main(sys.argv, sys.stdout, os.environ)
diff --git a/python/examples/base/odb_test.py b/python/examples/base/odb_test.py
deleted file mode 100755
index 6534bf8..0000000
--- a/python/examples/base/odb_test.py
+++ /dev/null
@@ -1,296 +0,0 @@
-#!/usr/bin/env python
-
-from odb import *
-
-## -----------------------------------------------------------------------
-## T E S T S
-## -----------------------------------------------------------------------
-
-import MySQLdb
-import odb_mysql
-import sqlite
-import odb_sqlite
-
-def TEST(output=log):
- LOGGING_STATUS[DEV_SELECT] = 1
- LOGGING_STATUS[DEV_UPDATE] = 1
-
- print "------ TESTING MySQLdb ---------"
- rdb = MySQLdb.connect(host = 'localhost',user='root', passwd = '', db='testdb')
- ndb = MySQLdb.connect(host = 'localhost',user='trakken', passwd = 'trakpas', db='testdb')
- cursor = rdb.cursor()
-
- output("drop table agents")
- try:
- cursor.execute("drop table agents") # clean out the table
- except:
- pass
- output("creating table")
-
- SQL = """
-
- create table agents (
- agent_id integer not null primary key auto_increment,
- login varchar(200) not null,
- unique (login),
- ext_email varchar(200) not null,
- hashed_pw varchar(20) not null,
- name varchar(200),
- auth_level integer default 0,
- ticket_count integer default 0)
- """
-
- cursor.execute(SQL)
- db = odb_mysql.Database(ndb)
- TEST_DATABASE(rdb,db,output=output)
-
- print "------ TESTING sqlite ----------"
- rdb = sqlite.connect("/tmp/test.db",autocommit=1)
- cursor = rdb.cursor()
- try:
- cursor.execute("drop table agents")
- except:
- pass
- SQL = """
- create table agents (
- agent_id integer primary key,
- login varchar(200) not null,
- ext_email varchar(200) not null,
- hashed_pw varchar(20),
- name varchar(200),
- auth_level integer default 0,
- ticket_count integer default 0)"""
- cursor.execute(SQL)
- rdb = sqlite.connect("/tmp/test.db",autocommit=1)
- ndb = sqlite.connect("/tmp/test.db",autocommit=1)
-
- db = odb_sqlite.Database(ndb)
- TEST_DATABASE(rdb,db,output=output,is_mysql=0)
-
-
-
-
-def TEST_DATABASE(rdb,db,output=log,is_mysql=1):
-
- cursor = rdb.cursor()
-
- class AgentsTable(Table):
- def _defineRows(self):
- self.d_addColumn("agent_id",kInteger,None,primarykey = 1,autoincrement = 1)
- self.d_addColumn("login",kVarString,200,notnull=1)
- self.d_addColumn("ext_email",kVarString,200,notnull=1)
- self.d_addColumn("hashed_pw",kVarString,20,notnull=1)
- self.d_addColumn("name",kBigString,compress_ok=1)
- self.d_addColumn("auth_level",kInteger,None)
- self.d_addColumn("ticket_count",kIncInteger,None)
-
- tbl = AgentsTable(db,"agents")
-
-
-
-
- TEST_INSERT_COUNT = 5
-
- # ---------------------------------------------------------------
- # make sure we can catch a missing row
-
- try:
- a_row = tbl.fetchRow( ("agent_id", 1000) )
- raise "test error"
- except eNoMatchingRows:
- pass
-
- output("PASSED! fetch missing row test")
-
- # --------------------------------------------------------------
- # create new rows and insert them
-
- for n in range(TEST_INSERT_COUNT):
- new_id = n + 1
-
- newrow = tbl.newRow()
- newrow.name = "name #%d" % new_id
- newrow.login = "name%d" % new_id
- newrow.ext_email = "%d@name" % new_id
- newrow.save()
- if newrow.agent_id != new_id:
- raise "new insert id (%s) does not match expected value (%d)" % (newrow.agent_id,new_id)
-
- output("PASSED! autoinsert test")
-
- # --------------------------------------------------------------
- # fetch one row
- a_row = tbl.fetchRow( ("agent_id", 1) )
-
- if a_row.name != "name #1":
- raise "row data incorrect"
-
- output("PASSED! fetch one row test")
-
- # ---------------------------------------------------------------
- # don't change and save it
- # (i.e. the "dummy cursor" string should never be called!)
- #
- try:
- a_row.save(cursor = "dummy cursor")
- except AttributeError, reason:
- raise "row tried to access cursor on save() when no changes were made!"
-
- output("PASSED! don't save when there are no changed")
-
- # ---------------------------------------------------------------
- # change, save, load, test
-
- a_row.auth_level = 10
- a_row.save()
- b_row = tbl.fetchRow( ("agent_id", 1) )
- if b_row.auth_level != 10:
- log(repr(b_row))
- raise "save and load failed"
-
-
- output("PASSED! change, save, load")
-
- # ---------------------------------------------------------------
- # replace
-
-
- repl_row = tbl.newRow(replace=1)
- repl_row.agent_id = a_row.agent_id
- repl_row.login = a_row.login + "-" + a_row.login
- repl_row.ext_email = "foo"
- repl_row.save()
-
- b_row = tbl.fetchRow( ("agent_id", a_row.agent_id) )
- if b_row.login != repl_row.login:
- raise "replace failed"
- output("PASSED! replace")
-
- # --------------------------------------------------------------
- # access unknown dict item
-
- try:
- a = a_row["UNKNOWN_ATTRIBUTE"]
- raise "test error"
- except KeyError, reason:
- pass
-
- try:
- a_row["UNKNOWN_ATTRIBUTE"] = 1
- raise "test error"
- except KeyError, reason:
- pass
-
- output("PASSED! unknown dict item exception")
-
- # --------------------------------------------------------------
- # access unknown attribute
- try:
- a = a_row.UNKNOWN_ATTRIBUTE
- raise "test error"
- except AttributeError, reason:
- pass
-
- try:
- a_row.UNKNOWN_ATTRIBUTE = 1
- raise "test error"
- except AttributeError, reason:
- pass
-
- output("PASSED! unknown attribute exception")
-
-
- # --------------------------------------------------------------
- # use wrong data for column type
-
- try:
- a_row.agent_id = "this is a string"
- raise "test error"
- except eInvalidData, reason:
- pass
-
- output("PASSED! invalid data for column type")
-
- # --------------------------------------------------------------
- # fetch 1 rows
-
- rows = tbl.fetchRows( ('agent_id', 1) )
- if len(rows) != 1:
- raise "fetchRows() did not return 1 row!" % (TEST_INSERT_COUNT)
-
- output("PASSED! fetch one row")
-
-
- # --------------------------------------------------------------
- # fetch All rows
-
- rows = tbl.fetchAllRows()
- if len(rows) != TEST_INSERT_COUNT:
- for a_row in rows:
- output(repr(a_row))
- raise "fetchAllRows() did not return TEST_INSERT_COUNT(%d) rows!" % (TEST_INSERT_COUNT)
-
- output("PASSED! fetchall rows")
-
-
- # --------------------------------------------------------------
- # delete row object
-
- row = tbl.fetchRow( ('agent_id', 1) )
- row.delete()
- try:
- row = tbl.fetchRow( ('agent_id', 1) )
- raise "delete failed to delete row!"
- except eNoMatchingRows:
- pass
-
- # --------------------------------------------------------------
- # table deleteRow() call
-
- row = tbl.fetchRow( ('agent_id',2) )
- tbl.deleteRow( ('agent_id', 2) )
- try:
- row = tbl.fetchRow( ('agent_id',2) )
- raise "table delete failed"
- except eNoMatchingRows:
- pass
-
- # --------------------------------------------------------------
- # table deleteRow() call
-
- row = tbl.fetchRow( ('agent_id',3) )
- if row.databaseSizeForColumn('name') != len(row.name):
- raise "databaseSizeForColumn('name') failed"
-
- # --------------------------------------------------------------
- # test inc fields
- row = tbl.newRow()
- new_id = 1092
- row.name = "name #%d" % new_id
- row.login = "name%d" % new_id
- row.ext_email = "%d@name" % new_id
- row.inc('ticket_count')
- row.save()
- new_id = row.agent_id
-
- trow = tbl.fetchRow( ('agent_id',new_id) )
- if trow.ticket_count != 1:
- raise "ticket_count didn't inc!"
-
- row.inc('ticket_count', count=2)
- row.save()
- trow = tbl.fetchRow( ('agent_id',new_id) )
- if trow.ticket_count != 3:
- raise "ticket_count wrong, expected 3, got %d" % trow.ticket_count
-
- trow.inc('ticket_count')
- trow.save()
- if trow.ticket_count != 4:
- raise "ticket_count wrong, expected 4, got %d" % trow.ticket_count
-
- output("\n==== ALL TESTS PASSED ====")
-
-
-if __name__ == "__main__":
- TEST()
-
diff --git a/python/examples/base/profiler.py b/python/examples/base/profiler.py
deleted file mode 100644
index 98ec129..0000000
--- a/python/examples/base/profiler.py
+++ /dev/null
@@ -1,73 +0,0 @@
-
-import time
-import who_calls
-import neo_cgi
-
-PROFILER_DATA = []
-PROFILER_START = 0
-PROFILER_ENABLED = 0
-PROFILER_DEPTH = 0
-
-def enable():
- global PROFILER_START
- global PROFILER_ENABLED
- global PROFILER_DATA
- PROFILER_START = time.time()
- PROFILER_ENABLED = 1
- PROFILER_DATA = []
-
-def disable():
- global PROFILER_START
- global PROFILER_ENABLED
- global PROFILER_DATA
- PROFILER_START = 0
- PROFILER_ENABLED = 0
- PROFILER_DATA = []
-
-def hdfExport(prefix, hdf):
- global PROFILER_DATA
- n = 0
- for p in PROFILER_DATA:
- hdf.setValue("%s.%d.when" % (prefix, n), "%5.2f" % (p.when))
- hdf.setValue("%s.%d.time" % (prefix, n), "%5.2f" % (p.length))
- hdf.setValue("%s.%d.klass" % (prefix, n), p.klass)
- hdf.setValue("%s.%d.what" % (prefix, n), "&nbsp;" * p.depth + p.what)
- hdf.setValue("%s.%d.where" % (prefix, n), neo_cgi.htmlEscape(p.where))
-
-class Profiler:
- def __init__ (self, klass, what):
- global PROFILER_START
- global PROFILER_ENABLED
- global PROFILER_DATA
- global PROFILER_DEPTH
- if not PROFILER_ENABLED: return
- self.when = time.time() - PROFILER_START
- self.klass = klass
- self.where = who_calls.pretty_who_calls()
- self.what = what
- self.length = 0
- self.depth = PROFILER_DEPTH
- PROFILER_DEPTH = PROFILER_DEPTH + 1
-
- PROFILER_DATA.append(self)
-
- def end(self):
- global PROFILER_ENABLED
- global PROFILER_DEPTH
- if not PROFILER_ENABLED: return
- self.length = time.time() - self.when - PROFILER_START
- PROFILER_DEPTH = PROFILER_DEPTH - 1
- if PROFILER_DEPTH < 0: PROFILER_DEPTH = 0
-
-class ProfilerCursor:
- def __init__ (self, real_cursor):
- self.real_cursor = real_cursor
-
- def execute (self, query, args=None):
- p = Profiler("SQL", query)
- r = self.real_cursor.execute(query, args)
- p.end()
- return r
-
- def __getattr__ (self, key):
- return getattr(self.real_cursor, key)
diff --git a/python/examples/base/sgmllib.py b/python/examples/base/sgmllib.py
deleted file mode 100644
index 81ac0af..0000000
--- a/python/examples/base/sgmllib.py
+++ /dev/null
@@ -1,615 +0,0 @@
-# A parser for SGML, using the derived class as static DTD.
-
-# XXX This only supports those SGML features used by HTML.
-
-# XXX There should be a way to distinguish between PCDATA (parsed
-# character data -- the normal case), RCDATA (replaceable character
-# data -- only char and entity references and end tags are special)
-# and CDATA (character data -- only end tags are special).
-
-# sgmlop support added by fredrik@pythonware.com (April 6, 1998)
-
-import re
-import string
-import sys
-
-try:
- from xml.parsers import sgmlop
-except ImportError:
- sgmlop = None
-
-# standard entity defs
-
-ENTITYDEFS = {
- 'lt': '<',
- 'gt': '>',
- 'amp': '&',
- 'quot': '"',
- 'apos': '\''
- }
-
-# SGML parser base class -- find tags and call handler functions.
-# Usage: p = SGMLParser(); p.feed(data); ...; p.close().
-# The dtd is defined by deriving a class which defines methods
-# with special names to handle tags: start_foo and end_foo to handle
-# <foo> and </foo>, respectively, or do_foo to handle <foo> by itself.
-# (Tags are converted to lower case for this purpose.) The data
-# between tags is passed to the parser by calling self.handle_data()
-# with some data as argument (the data may be split up in arbutrary
-# chunks). Entity references are passed by calling
-# self.handle_entityref() with the entity reference as argument.
-
-# --------------------------------------------------------------------
-# original re-based SGML parser
-
-interesting = re.compile('[&<]')
-incomplete = re.compile('&([a-zA-Z][a-zA-Z0-9]*|#[0-9]*)?|'
- '<([a-zA-Z][^<>]*|'
- '/([a-zA-Z][^<>]*)?|'
- '![^<>]*)?')
-
-entityref = re.compile('&([a-zA-Z][a-zA-Z0-9]*)[^a-zA-Z0-9]')
-charref = re.compile('&#([0-9]+)[^0-9]')
-
-starttagopen = re.compile('<[>a-zA-Z]')
-shorttagopen = re.compile('<[a-zA-Z][a-zA-Z0-9]*/')
-shorttag = re.compile('<([a-zA-Z][a-zA-Z0-9]*)/([^/]*)/')
-endtagopen = re.compile('</[<>a-zA-Z]')
-endbracket = re.compile('[<>]')
-special = re.compile('<![^<>]*>')
-commentopen = re.compile('<!--')
-commentclose = re.compile('--[ \t\n]*>')
-tagfind = re.compile('[a-zA-Z][a-zA-Z0-9]*')
-attrfind = re.compile(
- '[ \t\n]*([a-zA-Z_][-.a-zA-Z_0-9]*)'
- '([ \t\n]*=[ \t\n]*'
- r'(\'[^\']*\'|"[^"]*"|[^ \t\n]*))?')
-
-
-class SlowSGMLParser:
-
- # Interface -- initialize and reset this instance
- def __init__(self, verbose=0):
- self.verbose = verbose
- self.reset()
-
- # Interface -- reset this instance. Loses all unprocessed data
- def reset(self):
- self.rawdata = ''
- self.stack = []
- self.lasttag = '???'
- self.nomoretags = 0
- self.literal = 0
-
- # For derived classes only -- enter literal mode (CDATA) till EOF
- def setnomoretags(self):
- self.nomoretags = self.literal = 1
-
- # For derived classes only -- enter literal mode (CDATA)
- def setliteral(self, *args):
- self.literal = 1
-
- # Interface -- feed some data to the parser. Call this as
- # often as you want, with as little or as much text as you
- # want (may include '\n'). (This just saves the text, all the
- # processing is done by goahead().)
- def feed(self, data):
- self.rawdata = self.rawdata + data
- self.goahead(0)
-
- # Interface -- handle the remaining data
- def close(self):
- self.goahead(1)
-
- # Internal -- handle data as far as reasonable. May leave state
- # and data to be processed by a subsequent call. If 'end' is
- # true, force handling all data as if followed by EOF marker.
- def goahead(self, end):
- rawdata = self.rawdata
- i = 0
- n = len(rawdata)
- while i < n:
- if self.nomoretags:
- self.handle_data(rawdata[i:n])
- i = n
- break
- match = interesting.search(rawdata, i)
- if match: j = match.start(0)
- else: j = n
- if i < j: self.handle_data(rawdata[i:j])
- i = j
- if i == n: break
- if rawdata[i] == '<':
- if starttagopen.match(rawdata, i):
- if self.literal:
- self.handle_data(rawdata[i])
- i = i+1
- continue
- k = self.parse_starttag(i)
- if k < 0: break
- i = k
- continue
- if endtagopen.match(rawdata, i):
- k = self.parse_endtag(i)
- if k < 0: break
- i = k
- self.literal = 0
- continue
- if commentopen.match(rawdata, i):
- if self.literal:
- self.handle_data(rawdata[i])
- i = i+1
- continue
- k = self.parse_comment(i)
- if k < 0: break
- i = i+k
- continue
- match = special.match(rawdata, i)
- if match:
- if self.literal:
- self.handle_data(rawdata[i])
- i = i+1
- continue
- i = match.end(0)
- continue
- elif rawdata[i] == '&':
- match = charref.match(rawdata, i)
- if match:
- name = match.group(1)
- self.handle_charref(name)
- i = match.end(0)
- if rawdata[i-1] != ';': i = i-1
- continue
- match = entityref.match(rawdata, i)
- if match:
- name = match.group(1)
- self.handle_entityref(name)
- i = match.end(0)
- if rawdata[i-1] != ';': i = i-1
- continue
- else:
- raise RuntimeError, 'neither < nor & ??'
- # We get here only if incomplete matches but
- # nothing else
- match = incomplete.match(rawdata, i)
- if not match:
- self.handle_data(rawdata[i])
- i = i+1
- continue
- j = match.end(0)
- if j == n:
- break # Really incomplete
- self.handle_data(rawdata[i:j])
- i = j
- # end while
- if end and i < n:
- self.handle_data(rawdata[i:n])
- i = n
- self.rawdata = rawdata[i:]
- # XXX if end: check for empty stack
-
- # Internal -- parse comment, return length or -1 if not terminated
- def parse_comment(self, i):
- rawdata = self.rawdata
- if rawdata[i:i+4] <> '<!--':
- raise RuntimeError, 'unexpected call to handle_comment'
- match = commentclose.search(rawdata, i+4)
- if not match:
- return -1
- j = match.start(0)
- self.handle_comment(rawdata[i+4: j])
- j = match.end(0)
- return j-i
-
- # Internal -- handle starttag, return length or -1 if not terminated
- def parse_starttag(self, i):
- rawdata = self.rawdata
- if shorttagopen.match(rawdata, i):
- # SGML shorthand: <tag/data/ == <tag>data</tag>
- # XXX Can data contain &... (entity or char refs)?
- # XXX Can data contain < or > (tag characters)?
- # XXX Can there be whitespace before the first /?
- match = shorttag.match(rawdata, i)
- if not match:
- return -1
- tag, data = match.group(1, 2)
- tag = string.lower(tag)
- self.finish_shorttag(tag, data)
- k = match.end(0)
- return k
- # XXX The following should skip matching quotes (' or ")
- match = endbracket.search(rawdata, i+1)
- if not match:
- return -1
- j = match.start(0)
- # Now parse the data between i+1 and j into a tag and attrs
- attrs = []
- if rawdata[i:i+2] == '<>':
- # SGML shorthand: <> == <last open tag seen>
- k = j
- tag = self.lasttag
- else:
- match = tagfind.match(rawdata, i+1)
- if not match:
- raise RuntimeError, 'unexpected call to parse_starttag'
- k = match.end(0)
- tag = string.lower(rawdata[i+1:k])
- self.lasttag = tag
- while k < j:
- match = attrfind.match(rawdata, k)
- if not match: break
- attrname, rest, attrvalue = match.group(1, 2, 3)
- if not rest:
- attrvalue = attrname
- elif attrvalue[:1] == '\'' == attrvalue[-1:] or \
- attrvalue[:1] == '"' == attrvalue[-1:]:
- attrvalue = attrvalue[1:-1]
- attrs.append((string.lower(attrname), attrvalue))
- k = match.end(0)
- if rawdata[j] == '>':
- j = j+1
- self.finish_starttag(tag, attrs)
- return j
-
- # Internal -- parse endtag
- def parse_endtag(self, i):
- rawdata = self.rawdata
- match = endbracket.search(rawdata, i+1)
- if not match:
- return -1
- j = match.start(0)
- tag = string.lower(string.strip(rawdata[i+2:j]))
- if rawdata[j] == '>':
- j = j+1
- self.finish_endtag(tag)
- return j
-
- # Internal -- finish parsing of <tag/data/ (same as <tag>data</tag>)
- def finish_shorttag(self, tag, data):
- self.finish_starttag(tag, [])
- self.handle_data(data)
- self.finish_endtag(tag)
-
- # Internal -- finish processing of start tag
- # Return -1 for unknown tag, 0 for open-only tag, 1 for balanced tag
- def finish_starttag(self, tag, attrs):
- try:
- method = getattr(self, 'start_' + tag)
- except AttributeError:
- try:
- method = getattr(self, 'do_' + tag)
- except AttributeError:
- self.unknown_starttag(tag, attrs)
- return -1
- else:
- self.handle_starttag(tag, method, attrs)
- return 0
- else:
- self.stack.append(tag)
- self.handle_starttag(tag, method, attrs)
- return 1
-
- # Internal -- finish processing of end tag
- def finish_endtag(self, tag):
- if not tag:
- found = len(self.stack) - 1
- if found < 0:
- self.unknown_endtag(tag)
- return
- else:
- if tag not in self.stack:
- try:
- method = getattr(self, 'end_' + tag)
- except AttributeError:
- self.unknown_endtag(tag)
- return
- found = len(self.stack)
- for i in range(found):
- if self.stack[i] == tag: found = i
- while len(self.stack) > found:
- tag = self.stack[-1]
- try:
- method = getattr(self, 'end_' + tag)
- except AttributeError:
- method = None
- if method:
- self.handle_endtag(tag, method)
- else:
- self.unknown_endtag(tag)
- del self.stack[-1]
-
- # Overridable -- handle start tag
- def handle_starttag(self, tag, method, attrs):
- method(attrs)
-
- # Overridable -- handle end tag
- def handle_endtag(self, tag, method):
- method()
-
- # Example -- report an unbalanced </...> tag.
- def report_unbalanced(self, tag):
- if self.verbose:
- print '*** Unbalanced </' + tag + '>'
- print '*** Stack:', self.stack
-
- # Example -- handle character reference, no need to override
- def handle_charref(self, name):
- try:
- n = string.atoi(name)
- except string.atoi_error:
- self.unknown_charref(name)
- return
- if not 0 <= n <= 255:
- self.unknown_charref(name)
- return
- self.handle_data(chr(n))
-
- # Definition of entities -- derived classes may override
- entitydefs = ENTITYDEFS
-
- # Example -- handle entity reference, no need to override
- def handle_entityref(self, name):
- table = self.entitydefs
- if table.has_key(name):
- self.handle_data(table[name])
- else:
- self.unknown_entityref(name)
- return
-
- # Example -- handle data, should be overridden
- def handle_data(self, data):
- pass
-
- # Example -- handle comment, could be overridden
- def handle_comment(self, data):
- pass
-
- # To be overridden -- handlers for unknown objects
- def unknown_starttag(self, tag, attrs): pass
- def unknown_endtag(self, tag): pass
- def unknown_charref(self, ref): pass
- def unknown_entityref(self, ref): pass
-
-
-# --------------------------------------------------------------------
-# accelerated SGML parser
-
-class FastSGMLParser:
-
- # Interface -- initialize and reset this instance
- def __init__(self, verbose=0):
- self.verbose = verbose
- self.reset()
-
- # Interface -- reset this instance. Loses all unprocessed data
- def reset(self):
- self.rawdata = ''
- self.stack = []
- self.lasttag = '???'
- self.nomoretags = 0
- self.literal = 0
- self.parser = sgmlop.SGMLParser()
- self.feed = self.parser.feed
- self.parser.register(self)
-
- # For derived classes only -- enter literal mode (CDATA) till EOF
- def setnomoretags(self):
- self.nomoretags = self.literal = 1 # FIXME!
-
- # For derived classes only -- enter literal mode (CDATA)
- def setliteral(self, *args):
- self.literal = 1 # FIXME!
-
- # Interface -- feed some data to the parser. Call this as
- # often as you want, with as little or as much text as you
- # want (may include '\n').
- def feed(self, data): # overridden by reset
- self.parser.feed(data)
-
- # Interface -- handle the remaining data
- def close(self):
- try:
- self.parser.close()
- finally:
- self.parser = None
-
- # Internal -- finish parsing of <tag/data/ (same as <tag>data</tag>)
- def finish_shorttag(self, tag, data):
- self.finish_starttag(tag, [])
- self.handle_data(data)
- self.finish_endtag(tag)
-
- # Internal -- finish processing of start tag
- # Return -1 for unknown tag, 0 for open-only tag, 1 for balanced tag
- def finish_starttag(self, tag, attrs):
- # FIXME: should move this logic into sgmlop!
- try:
- method = getattr(self, 'start_' + tag)
- except AttributeError:
- try:
- method = getattr(self, 'do_' + tag)
- except AttributeError:
- self.unknown_starttag(tag, attrs)
- return -1
- else:
- self.handle_starttag(tag, method, attrs)
- return 0
- else:
- self.stack.append(tag)
- self.handle_starttag(tag, method, attrs)
- return 1
-
- # Internal -- finish processing of end tag
- def finish_endtag(self, tag):
- if not tag:
- found = len(self.stack) - 1
- if found < 0:
- self.unknown_endtag(tag)
- return
- else:
- if tag not in self.stack:
- try:
- method = getattr(self, 'end_' + tag)
- except AttributeError:
- self.unknown_endtag(tag)
- return
- found = len(self.stack)
- for i in range(found):
- if self.stack[i] == tag: found = i
- while len(self.stack) > found:
- tag = self.stack[-1]
- try:
- method = getattr(self, 'end_' + tag)
- except AttributeError:
- method = None
- if method:
- self.handle_endtag(tag, method)
- else:
- self.unknown_endtag(tag)
- del self.stack[-1]
-
- # Overridable -- handle start tag
- def handle_starttag(self, tag, method, attrs):
- method(attrs)
-
- # Overridable -- handle end tag
- def handle_endtag(self, tag, method):
- method()
-
- # Example -- report an unbalanced </...> tag.
- def report_unbalanced(self, tag):
- if self.verbose:
- print '*** Unbalanced </' + tag + '>'
- print '*** Stack:', self.stack
-
- # Example -- handle character reference, no need to override
- # def handle_charref(self, name):
- # pass
-
- # Definition of entities -- derived classes may override
- entitydefs = ENTITYDEFS
-
- # Example -- handle entity reference, no need to override
- def handle_entityref(self, name):
- try:
- data = self.entitydefs[name]
- except KeyError:
- self.unknown_entityref(name)
- else:
- self.handle_data(data)
-
- # Example -- handle data, should be overridden
- def handle_data(self, data):
- pass
-
- # Example -- handle comment, could be overridden
- # def handle_comment(self, data):
- # pass
-
- # To be overridden -- handlers for unknown objects
- def unknown_starttag(self, tag, attrs): pass
- def unknown_endtag(self, tag): pass
- def unknown_charref(self, ref): pass
- def unknown_entityref(self, ref): pass
-
-
-#sgmlop = None
-
-# pick a suitable parser
-if sgmlop:
- SGMLParser = FastSGMLParser
-else:
- SGMLParser = SlowSGMLParser
-
-# --------------------------------------------------------------------
-# test stuff
-
-class TestSGMLParser(SGMLParser):
-
- def __init__(self, verbose=0):
- self.testdata = ""
- SGMLParser.__init__(self, verbose)
-
- def handle_data(self, data):
- self.testdata = self.testdata + data
- if len(`self.testdata`) >= 70:
- self.flush()
-
- def flush(self):
- data = self.testdata
- if data:
- self.testdata = ""
- print 'data:', `data`
-
- def handle_comment(self, data):
- self.flush()
- r = `data`
- if len(r) > 68:
- r = r[:32] + '...' + r[-32:]
- print 'comment:', r
-
- def unknown_starttag(self, tag, attrs):
- self.flush()
- if not attrs:
- print 'start tag: <' + tag + '>'
- else:
- print 'start tag: <' + tag,
- for name, value in attrs:
- print name + '=' + '"' + value + '"',
- print '>'
-
- def unknown_endtag(self, tag):
- self.flush()
- print 'end tag: </' + tag + '>'
-
- def unknown_entityref(self, ref):
- self.flush()
- print '*** unknown entity ref: &' + ref + ';'
-
- def unknown_charref(self, ref):
- self.flush()
- print '*** unknown char ref: &#' + ref + ';'
-
- def close(self):
- SGMLParser.close(self)
- self.flush()
-
-
-def test(args = None):
- import sys
-
- if not args:
- args = sys.argv[1:]
-
- if args and args[0] == '-s':
- args = args[1:]
- klass = SGMLParser
- else:
- klass = TestSGMLParser
-
- if args:
- file = args[0]
- else:
- file = 'test.html'
-
- if file == '-':
- f = sys.stdin
- else:
- try:
- f = open(file, 'r')
- except IOError, msg:
- print file, ":", msg
- sys.exit(1)
-
- data = f.read()
- if f is not sys.stdin:
- f.close()
-
- x = klass()
- for c in data:
- x.feed(c)
- x.close()
-
-
-if __name__ == '__main__':
- test()
diff --git a/python/examples/base/who_calls.py b/python/examples/base/who_calls.py
deleted file mode 100644
index dccbf9d..0000000
--- a/python/examples/base/who_calls.py
+++ /dev/null
@@ -1,141 +0,0 @@
-
-# who_calls.py
-# by Sam Rushing for Medusa
-
-import string
-import sys
-
-from log import *
-
-whoCallsError = "whoCallsError"
-
-#--------------------------------------------------------------
-# Example use:
-#
-# import who_calls
-# log(who_calls.pretty_who_calls())
-#
-#--------------------------------------------------------------
-
-def test():
- for i in range(1,1000):
- pretty_who_calls()
-
- print_top_100()
-
-def who_calls_helper():
- tinfo = []
- exc_info = sys.exc_info()
-
- f = exc_info[2].tb_frame.f_back
- while f:
- tinfo.append ( (
- f.f_code.co_filename,
- f.f_code.co_name,
- f.f_lineno )
- )
- f = f.f_back
-
- del exc_info
- return tinfo
-
-
-def who_calls():
- try:
- raise whoCallsError
- except whoCallsError:
- tinfo = who_calls_helper()
- return tinfo
-
-def pretty_who_calls(strip=0):
- info = who_calls()
- buf = []
-
- for file,function,line in info[1 + strip:]:
- buf.append(" %s(%s): %s()" % (file,line,function))
-
- return string.join(buf,"\n")
-
-# ---------------------------------------------------------------------------
-# used for debugging.
-# ---------------------------------------------------------------------------
-
-def compact_traceback ():
- t,v,tb = sys.exc_info()
- tbinfo = []
- if tb is None:
- # this should never happen, but then again, lots of things
- # should never happen but do.
- return (('','',''), str(t), str(v), 'traceback is None!!!')
- while 1:
- tbinfo.append (
- tb.tb_frame.f_code.co_filename,
- tb.tb_frame.f_code.co_name,
- str(tb.tb_lineno)
- )
- tb = tb.tb_next
- if not tb:
- break
-
- # just to be safe
- del tb
-
- file, function, line = tbinfo[-1]
- info = '[' + string.join (
- map (
- lambda x: string.join (x, '|'),
- tbinfo
- ),
- '] ['
- ) + ']'
-
- return (file, function, line), str(t), str(v), info
-
-## ----------------------------------------------------
-## Refcount printing
-
-import sys
-import types
-
-def real_get_refcounts(base = None, set_base = 0):
- d = {}
- sys.modules
- # collect all classes
- for modname,m in sys.modules.items():
- for sym in dir(m):
- o = getattr (m, sym)
- if type(o) is types.ClassType:
- name = "%s:%s" % (modname,o.__name__)
- cnt = sys.getrefcount (o)
- if base:
- if set_base:
- base[name] = cnt
- elif cnt > base.get(name, 0):
- d[name] = cnt - base.get(name, 0)
- else:
- d[name] = cnt
- return d
-
-def get_refcounts(base=None):
- d = real_get_refcounts(base = base)
- # sort by refcount
- pairs = map (lambda x: (x[1],x[0]), d.items())
- pairs.sort()
- pairs.reverse()
- return pairs
-
-REFCOUNTS = {}
-
-def set_refcount_base():
- global REFCOUNTS
- real_get_refcounts(REFCOUNTS, set_base = 1)
-
-def print_top_100():
- print_top_N(100)
-
-def print_top_N(N):
- global REFCOUNTS
- for n, c in get_refcounts(REFCOUNTS)[:N]:
- log('%10d %s' % (n, c))
-
-
diff --git a/python/examples/base/wordwrap.py b/python/examples/base/wordwrap.py
deleted file mode 100755
index 4397805..0000000
--- a/python/examples/base/wordwrap.py
+++ /dev/null
@@ -1,50 +0,0 @@
-"""
-WordWrapping
-"""
-
-
-import os, sys, string, time, getopt
-import re
-
-def WordWrap(text, cols=70, detect_paragraphs = 0, is_header = 0):
- text = string.replace(text,"\r\n", "\n") # remove CRLF
- def nlrepl(matchobj):
- if matchobj.group(1) != ' ' and matchobj.group(2) != ' ':
- repl_with = ' '
- else:
- repl_with = ''
-
- return matchobj.group(1) + repl_with + matchobj.group(2)
-
- if detect_paragraphs:
- text = re.sub("([^\n])\n([^\n])",nlrepl,text)
-
- body = []
- i = 0
- j = 0
- ltext = len(text)
-
- while i<ltext:
- if i+cols < ltext:
- r = string.find(text, "\n", i, i+cols)
- j = r
- if r == -1:
- j = string.rfind(text, " ", i, i+cols)
- if j == -1:
- r = string.find(text, "\n", i+cols)
- if r == -1: r = ltext
- j = string.find(text, " ", i+cols)
- if j == -1: j = ltext
- j = min(j, r)
- else:
- j = ltext
-
- body.append(string.strip(text[i:j]))
- i = j+1
-
- if is_header:
- body = string.join(body, "\n ")
- else:
- body = string.join(body, "\n")
- return body
-
diff --git a/python/examples/trans/README b/python/examples/trans/README
deleted file mode 100644
index 8700a5e..0000000
--- a/python/examples/trans/README
+++ /dev/null
@@ -1,118 +0,0 @@
-*********************************
-*
-* trans.py - language extraction toolkit
-*
-* - Brandon Long, David Jeske
-*
-
-** Getting Started
-
-1) First you need to create a MySQL trans database for your application.
-
- > mysql -uroot
- mysql> create database trans_data
- mysql> quit
- > mysql -uroot trans_data < trans.sql
-
-2) Then just run trans on the test data to verify that it is working..
-
- > ./trans.py
-
- Check out the 'testroot/gen' directory.
-
-3) Then, in your application, make sure your CSPage setup equivilant is
- doing the following:
-
- 1) Make sure "gen/tmpl/<lang>" and "gen/tmpl" are in hdf.loadpaths
- before your template directories. This assures that the load will
- prefer files in the language specific template directory first,
- the language directory second, and your template directories last.
-
- 2) after loading your page-specific HDF file, be sure to
- load "lang_<lang>.hdf" over the top. This will automatically
- override HDF lang strings with the proper values from the translated
- language files.
-
-4) Configure trans.py in the __init__ function (sorry for the hardcoded
- stuff)
-
-5) When you want to translate into a new language, take the
- 'strings_en.hdf' file and copy it to trans_XX.hdf. Translate
- the strings in it, and then run:
-
- > ./trans.py --lang XX --load trans_XX.hdf
- > ./trans.py
-
- Each time trans is run, it will dump the list of missing strings for
- every language which has any strings at all. Simply follow the same
- procedure above with the missing strings file to update the
- translation in that language.
-
-
-** About trans.py
-
-This tools allows you to (mostly) automatically extract language
-strings from HTML Clearsilver templates, and from Clearsilver HDF
-files. trans inserts all unique strings into a database, and
-provides you facilities for exporting and importing the strings in the
-database. trans then creates a 'gen' tree where your source files
-reference language strings, and dumps lang_XX.hdf files which
-define those strings.
-
-
-Two mechanisms are used to find language strings:
-
-1) Any language string present in an HDF file should be marked
- with the [Lang] attribute. For example:
-
- Menu.Name [Lang] = Start Here
-
- Trans will automatically replace this with a copy reference to
- the lang hash-keyed string in the currently imported language.
-
- Menu.Name : Lang.L112414
-
-2) Parsing of html attempts to find language strings automatically.
- This allows you to leave most of your language strings in-tact
- in your primary language, making working on your application
- much easier.
-
- Some parts of HTML structure, including some tag attributes and
- javascript, are too complicated for trans to automatically do
- the right thing. In these cases, you must manually extract
- the string into an HDF file and then reference it in your HTML.
-
- For example, in the following HTML/Clearsilver fragment,
- the heading will be automatically identified, but the submit
- button title cannot be extracted by trans safetly.
-
- <html>
- <body>
- <h1> Send us your Feedback </h1>
- <form>
- <input type=text name=feedback>
- <input type=submit name="Action.Submit"
- value="Send Feedback">
- </form>
- </body>
- </html>
-
- You must convert the above fragment into something like this:
-
- <html>
- <body>
- <h1> Send us your Feedback </h1>
- <form>
- <input type=text name=feedback>
- <input type=submit name="Action.Submit"
- value="<?cs var:Lang.SendFeedback ?>">
- </form>
- </body>
- </html>
-
- The "Lang.SendFeedback" item must be declared in your static page
- HDF, and must be marked with the '[Lang]' attribute.
-
- Lang.SendFeedback [Lang] = Send Feedback
-
-
diff --git a/python/examples/trans/TODO b/python/examples/trans/TODO
deleted file mode 100644
index 2064b15..0000000
--- a/python/examples/trans/TODO
+++ /dev/null
@@ -1,22 +0,0 @@
-******************************
-**
-** trans.py TODO
-**
-** David Jeske
-
-- create 'translation configuration file' which gets placed
- in application root or template root directory. This should
- specify all paramaters which are currently hardcoded in
- trans.py.
-
- Require the user to supply this configuration file each time
- trans is called.
-
-- extend database schema to handle more than one application
- in a single trans database.
-
-- make web UI for browsing trans database
-
-- clearsilver/trans 'z-tag live language QA system' like
- we had at egroups
-
diff --git a/python/examples/trans/db_trans.py b/python/examples/trans/db_trans.py
deleted file mode 100644
index c07c0d6..0000000
--- a/python/examples/trans/db_trans.py
+++ /dev/null
@@ -1,82 +0,0 @@
-
-
-from odb import *
-import profiler
-import socket
-
-USER = 'root'
-PASSWORD = ''
-DATABASE = 'trans_data'
-
-class TransStringTable(Table):
- # access patterns:
- # -> lookup individual entries by string_id
- # -> lookup entry by string
- def _defineRows(self):
- self.d_addColumn("string_id", kInteger, primarykey=1, autoincrement=1)
- # we can't actually index this... but we can index part with myisam
- self.d_addColumn("string", kBigString, indexed=1)
-
-## hmm, on second thought, storing this is in the database is kind
-## of silly..., since it essentially could change with each run. It may
-## not even be necessary to store this anywhere except in memory while
-## trans is running
-class TransLocTable(Table):
- # access patterns:
- # -> find "same" entry by filename/offset
- # -> dump all locations for a version
- # -> maybe: find all locations for a filename
- def _defineRows(self):
- self.d_addColumn("loc_id", kInteger, primarykey=1, autoincrement=1)
- self.d_addColumn("string_id", kInteger, indexed=1)
- self.d_addColumn("version", kInteger, default=0)
- self.d_addColumn("filename", kVarString, 255, indexed=1)
- self.d_addColumn("location", kVarString, 255)
- # this can either be:
- # ofs:x:y
- # hdf:foo.bar.baz
-
-class TransMapTable(Table):
- # access patterns:
- # -> dump all for a language
- # -> lookup entry by string_id/lang
- def _defineRows(self):
- self.d_addColumn("string_id", kInteger, primarykey=1)
- self.d_addColumn("lang", kFixedString, 2, primarykey=1)
- self.d_addColumn("string", kBigString)
-
-class DB(Database):
- def __init__(self, db, debug=0):
- self.db = db
- self._cursor = None
- self.debug = debug
-
- self.addTable("strings", "nt_trans_strings", TransStringTable)
- self.addTable("locs", "nt_trans_locs", TransLocTable)
- self.addTable("maps", "nt_trans_maps", TransMapTable)
-
- def defaultCursor(self):
- # share one cursor for this db object!
- if self._cursor is None:
- if self.debug:
- self._cursor = profiler.ProfilerCursor(self.db.cursor())
- else:
- self._cursor = self.db.cursor()
-
- return self._cursor
-
-def trans_connect(host = 'localhost', debug=0):
- # try to optimize connection if on this machine
- if host != 'localhost':
- local_name = socket.gethostname()
- if string.find(local_name, '.') == -1:
- local_name = local_name + ".neotonic.com"
- if local_name == host:
- host = 'localhost'
-
- if debug: p = profiler.Profiler("SQL", "Connect -- %s:trans" % (host))
- db = MySQLdb.connect(host = host, user=USER, passwd = PASSWORD, db=DATABASE)
- if debug: p.end()
-
- retval = DB(db, debug=debug)
- return retval
diff --git a/python/examples/trans/testroot/tmpl/test1.cs b/python/examples/trans/testroot/tmpl/test1.cs
deleted file mode 100644
index 34c1d78..0000000
--- a/python/examples/trans/testroot/tmpl/test1.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
-<body>
-
-<p>
-This is an html file language string which should be translated..</p>
-
-</body>
-</html>
diff --git a/python/examples/trans/testroot/tmpl/test1.hdf b/python/examples/trans/testroot/tmpl/test1.hdf
deleted file mode 100644
index 97cd03e..0000000
--- a/python/examples/trans/testroot/tmpl/test1.hdf
+++ /dev/null
@@ -1,5 +0,0 @@
-
-hdfdata = This is hdf data, not language data
-
-hdflang [Lang] = This is a language string and should be translated
-
diff --git a/python/examples/trans/trans.py b/python/examples/trans/trans.py
deleted file mode 100755
index bb2c9c9..0000000
--- a/python/examples/trans/trans.py
+++ /dev/null
@@ -1,594 +0,0 @@
-#!/neo/opt/bin/python
-
-import sys, string, os, getopt, pwd, signal, time, re
-import fcntl
-
-import tstart
-
-import db_trans
-from log import *
-import neo_cgi, neo_util
-import odb
-
-eTransError = "eTransError"
-
-DONE = 0
-DEBUG = 0
-
-TIER2_DIV = 11
-TIER1_DIV = 11 * TIER2_DIV
-
-if not DEBUG: LOGGING_STATUS[DEV_UPDATE] = 0
-
-def handleSignal(*arg):
- global DONE
- DONE = 1
-
-def usage():
- print "usage info!!"
-
-def exceptionString():
- import StringIO, traceback
-
- ## get the traceback message
- sfp = StringIO.StringIO()
- traceback.print_exc(file=sfp)
- exception = sfp.getvalue()
- sfp.close()
-
- return exception
-
-class TransLoc:
- def __init__ (self, string_id, filename, location):
- self.string_id = string_id
- self.filename = filename
- self.location = location
-
-class Translator:
- _HTML_TAG_RE = None
- _HTML_TAG_REGEX = '<[^!][^>]*?>'
- _HTML_CMT_RE = None
- _HTML_CMT_REGEX = '<!--.*?-->'
- _CS_TAG_RE = None
- _CS_TAG_REGEX = '<\\?.+?\\?>'
-
- def __init__ (self):
- self.tdb = db_trans.trans_connect()
-
- # configuration data ......
- # - we should stop hardcoding this... - jeske
-
- self.root = "testroot"
- self.languages = ['es', 'en']
-
- self.ignore_paths = ['tmpl/m'] # common place for mockups
- self.ignore_files = ['blah_ignore.cs'] # ignore clearsilver file
-
- # ignore clearsilver javascript files
- self.ignore_patterns = ['tmpl/[^ ]*_js.cs']
-
- # ............................
-
-
- if self.root is None:
- raise "Unable to determine installation root"
-
-
- if Translator._HTML_TAG_RE is None:
- Translator._HTML_TAG_RE = re.compile(Translator._HTML_TAG_REGEX, re.MULTILINE | re.DOTALL)
- if Translator._HTML_CMT_RE is None:
- Translator._HTML_CMT_RE = re.compile(Translator._HTML_CMT_REGEX, re.MULTILINE | re.DOTALL)
- if Translator._CS_TAG_RE is None:
- Translator._CS_TAG_RE = re.compile(Translator._CS_TAG_REGEX, re.MULTILINE | re.DOTALL)
-
- self._html_state = 0
-
-
- def parseHTMLTag(self, data):
- # this is only called if we see a full tag in one parse...
- i = 0
- if len(data) == 0: return []
- if data[0] in '/?': return []
- while i < len(data) and data[i] not in ' \n\r\t>': i = i + 1
- if i == len(data): return []
- tag = data[:i].lower()
- #print "Searching tag: %s" % data
- #print "Found tag: %s" % tag
- results = []
- attrfind = re.compile(
- r'\s*([a-zA-Z_][-.a-zA-Z_0-9]*)(\s*=\s*'
- r'(\'[^\']*\'|"[^"]*"|[^ \t\n<>]*))?')
- k = i
- attrs = {}
- attrs_beg = {}
- while k < len(data):
- match = attrfind.match(data, k)
- if not match: break
- attrname, rest, attrvalue = match.group(1, 2, 3)
- if not rest:
- attrvalue = attrname
- elif attrvalue[:1] == '\'' == attrvalue[-1:] or \
- attrvalue[:1] == '"' == attrvalue[-1:]:
- attrvalue = attrvalue[1:-1]
- attrname = attrname.lower()
- if attrs.has_key(attrname):
- log("Can't handle duplicate attrs: %s" % attrname)
- attrs[attrname] = attrvalue
- attrs_beg[attrname] = match.start(3)
- k = match.end(0)
-
- find_l = []
- if tag == "input":
- if attrs.get('type', "").lower() in ["submit", "button"]:
- find_l.append((attrs.get('value', ''), attrs_beg.get('value', 0)))
-
- for s,k in find_l:
- if s:
- x = data[k:].find(s)
- if x != -1: results.append((s, x+k, 1))
-
- return results
-
- def parseHTML(self, data, reset=1):
- if reset: self._html_state = 0
- if DEBUG: print "- %d ---------\n%s\n- E ---------" % (self._html_state, data)
-
- results = []
- i = 0
- n = len(data)
- # if we had state from the last parse... find it
- if self._html_state:
- if self._html_state == 2:
- x = string.find(data[i:], '-->')
- l = 3
- else:
- x = string.find(data[i:], '>')
- l = 1
- if x == -1: return results
- i = i + x + l
- self._html_state = 0
- while i < n:
- if DEBUG: print "MATCHING>%s<MATCHING" % data[i:]
- cmt_b = string.find(data[i:], '<!--')
- cmt_e = string.find(data[i:], '-->')
- tag_b = string.find(data[i:], '<')
- tag_e = string.find(data[i:], '>')
- if DEBUG: print "B> %d %d %d %d <B" % (cmt_b, cmt_e, tag_b, tag_e)
- if cmt_b != -1 and cmt_b <= tag_b:
- x = i
- y = i+cmt_b-1
- while x < y and data[x] in string.whitespace: x+=1
- while y > x and data[y] in string.whitespace: y-=1
- results.append((data[x:y+1], x, 1))
- if cmt_e == -1: # partial comment:
- self._html_state = 2
- break
- i = i + cmt_e + 3
- elif tag_b != -1:
- x = i
- y = i+tag_b-1
- while x < y and data[x] in string.whitespace: x+=1
- while y > x and data[y] in string.whitespace: y-=1
- results.append((data[x:y+1], x, 1))
- if tag_e == -1: # partial tag
- self._html_state = 1
- break
- h_results = self.parseHTMLTag(data[i+tag_b+1:i+tag_e])
- h_results = map(lambda x: (x[0], x[1] + i+tag_b+1, x[2]), h_results)
- results = results + h_results
- i = i + tag_e + 1
- else:
- x = i
- y = n-1
- while x < y and data[x] in string.whitespace: x+=1
- while y > x and data[y] in string.whitespace: y-=1
- results.append((data[x:y+1], x, 1))
- break
- return results
-
- def parseCS(self, data):
- results = []
- i = 0
- n = len(data)
- while i < n:
- m = Translator._CS_TAG_RE.search(data, i)
- if not m:
- # search for a partial...
- x = string.find(data[i:], '<?')
- if x == -1:
- results.append((data[i:], i))
- else:
- results.append((data[i:x], i))
- break
- (b, e) = m.span()
- if i != b: results.append((data[i:b], i))
- i = e
- t_results = []
- self._html_in = 0
- for (s, ofs) in results:
- r = self.parseHTML(s, reset=0)
- r = map(lambda x: (x[0], x[1] + ofs, x[2]), r)
- t_results = t_results + r
- return t_results
-
- def descendHDF(self, obj, prefix):
- results = []
- while obj is not None:
- if obj.value():
- attrs = obj.attrs()
- attrs = map(lambda x: x[0], attrs)
- if "Lang" in attrs:
- if prefix:
- results.append((obj.value(), "%s.%s" % (prefix, obj.name()), 0))
- else:
- results.append((obj.value(), "%s" % (obj.name()), 0))
- if obj.child():
- if prefix:
- results = results + self.descendHDF(obj.child(), "%s.%s" % (prefix, obj.name()))
- else:
- results = results + self.descendHDF(obj.child(), (obj.name()))
- obj = obj.next()
- return results
-
- def parseHDF(self, data):
- # Ok, we handle HDF files specially.. the theory is, we only
- # extract entire HDF elements which have the attribute Lang
- hdf = neo_util.HDF()
- hdf.readString(data, 1)
- return self.descendHDF(hdf, "")
-
- def handleFile(self, file):
- if file in self.ignore_files: return []
- for a_re in self.ignore_patterns:
- if re.match(a_re,file):
- return []
- fpath = self.root + '/' + file
- x = string.rfind(file, '.')
- if x == -1: return []
- data = open(fpath, 'r').read()
- ext = file[x:]
- strings = []
- if ext in ['.cst', '.cs']:
- strings = self.parseCS(data)
- elif ext in ['.html', '.htm']:
- strings = self.parseHTML(data)
- elif ext in ['.hdf']:
- strings = self.parseHDF(data)
- if len(strings):
- print "Found %d strings in %s" % (len(strings), file)
- return strings
- return []
-
- def walkDirectory(self, path):
- if path in self.ignore_paths: return []
- fpath = self.root + '/' + path
- files = os.listdir(fpath)
- dirs = []
- results = []
- for file in files:
- if file[0] == '.': continue
- fname = fpath + '/' + file
- if os.path.isdir(fname):
- dirs.append(file)
- else:
- strings = self.handleFile(path + '/' + file)
- if len(strings):
- results.append((path + '/' + file, strings))
- for dir in dirs:
- if dir not in ["release"]:
- results = results + self.walkDirectory(path + '/' + dir)
- return results
-
- def cleanHtmlString(self, s):
- s = re.sub("\s+", " ", s)
- return string.strip(s)
-
- def containsWords(self, s, ishtml):
- if ishtml:
- s = string.replace(s, '&nbsp;', ' ')
- s = string.replace(s, '&quot;', '"')
- s = string.replace(s, '&copy;', '')
- s = string.replace(s, '&lt;', '<')
- s = string.replace(s, '&gt;', '>')
- s = string.replace(s, '&amp;', '&')
- for x in range (len (s)):
- n = ord(s[x])
- if (n>47 and n<58) or (n>64 and n<91) or (n>96 and n<123): return 1
- return 0
-
- def findString(self, s):
- rows = self.tdb.strings.fetchRows( ('string', s) )
- if len(rows) == 0:
- row = self.tdb.strings.newRow()
- row.string = s
- row.save()
- return row.string_id
- elif len(rows) > 1:
- raise eTransError, "String %s exists multiple times!" % s
- else:
- return rows[0].string_id
-
- def loadStrings(self, one_file=None, verbose=0):
- if one_file is not None:
- strings = self.handleFile(one_file)
- results = [(one_file, strings)]
- else:
- results = self.walkDirectory('tmpl')
- uniq = {}
- cnt = 0
- seen_hdf = {}
- for fname, strings in results:
- for (s, ofs, ishtml) in strings:
- if s and string.strip(s):
- l = len(s)
- if ishtml:
- s = self.cleanHtmlString(s)
- if self.containsWords(s, ishtml):
- if type(ofs) == type(""): # HDF
- if seen_hdf.has_key(ofs):
- if seen_hdf[ofs][0] != s:
- log("Duplicate HDF Name %s:\n\t file %s = %s\n\t file %s = %s" % (ofs, seen_hdf[ofs][1], seen_hdf[ofs][0], fname, s))
- else:
- seen_hdf[ofs] = (s, fname)
- try:
- uniq[s].append((fname, ofs, l))
- except KeyError:
- uniq[s] = [(fname, ofs, l)]
- cnt = cnt + 1
- print "%d strings, %d unique" % (cnt, len(uniq.keys()))
- fp = open("map", 'w')
- for (s, locs) in uniq.items():
- locs = map(lambda x: "%s:%s:%d" % x, locs)
- fp.write('#: %s\n' % (string.join(locs, ',')))
- fp.write('msgid=%s\n\n' % repr(s))
-
- log("Loading strings/locations into database")
- locations = []
- for (s, locs) in uniq.items():
- s_id = self.findString(s)
- for (fname, ofs, l) in locs:
- if type(ofs) == type(""): # ie, its HDF
- location = "hdf:%s" % ofs
- else:
- location = "ofs:%d:%d" % (ofs, l)
- loc_r = TransLoc(s_id, fname, location)
- locations.append(loc_r)
- return locations
-
- def stringsHDF(self, prefix, locations, lang='en', exist=0, tiered=0):
- hdf = neo_util.HDF()
- if exist and lang == 'en': return hdf
- done = {}
- locations.sort()
- maps = self.tdb.maps.fetchRows( ('lang', lang) )
- maps_d = {}
- for map in maps:
- maps_d[int(map.string_id)] = map
- strings = self.tdb.strings.fetchRows()
- strings_d = {}
- for string in strings:
- strings_d[int(string.string_id)] = string
- count = 0
- for loc in locations:
- s_id = int(loc.string_id)
- if done.has_key(s_id): continue
- try:
- s_row = maps_d[s_id]
- if exist: continue
- except KeyError:
- try:
- s_row = strings_d[s_id]
- except KeyError:
- log("Missing string_id %d, skipping" % s_id)
- continue
- count = count + 1
- if tiered:
- hdf.setValue("%s.%d.%d.%s" % (prefix, int(s_id) / TIER1_DIV, int(s_id) / TIER2_DIV, s_id), s_row.string)
- else:
- hdf.setValue("%s.%s" % (prefix, s_id), s_row.string)
- done[s_id] = 1
- if exist == 1: log("Missing %d strings for lang %s" % (count, lang))
- return hdf
-
- def dumpStrings(self, locations, lang=None):
- log("Dumping strings to HDF")
- if lang is None:
- langs = ['en']
- sql = "select lang from nt_trans_maps group by lang"
- cursor = self.tdb.defaultCursor()
- cursor.execute(sql)
- rows = cursor.fetchall()
- for row in rows:
- langs.append(row[0])
- else:
- langs = [lang]
-
- for a_lang in langs:
- hdf = self.stringsHDF('S', locations, a_lang)
- hdf.writeFile("strings_%s.hdf" % a_lang)
-
- for a_lang in langs:
- hdf = self.stringsHDF('S', locations, a_lang, exist=1)
- if hdf.child():
- hdf.writeFile("strings_missing_%s.hdf" % a_lang)
-
- def fetchString(self, s_id, lang):
- if lang == "hdf":
- return "<?cs var:Lang.Extracted.%d.%d.%s ?>" % (int(s_id) / TIER1_DIV, int(s_id) / TIER2_DIV, s_id)
- rows = self.tdb.maps.fetchRows( [('string_id', s_id), ('lang', lang)] )
- if len(rows) == 0:
- try:
- row = self.tdb.strings.fetchRow( ('string_id', s_id) )
- except odb.eNoMatchingRows:
- log("Unable to find string id %s" % s_id)
- raise eNoString
- if lang != 'en':
- log("Untranslated string for id %s" % s_id)
- return row.string
- else:
- return rows[0].string
-
- def dumpFiles(self, locations, lang):
- log("Dumping files for %s" % lang)
- files = {}
- for row in locations:
- try:
- files[row.filename].append(row)
- except KeyError:
- files[row.filename] = [row]
-
- hdf_map = []
-
- os.system("rm -rf %s/gen/tmpl" % (self.root))
- for file in files.keys():
- fname = "%s/gen/%s" % (self.root, file)
- try:
- os.makedirs(os.path.dirname(fname))
- except OSError, reason:
- if reason[0] != 17:
- raise
- do_hdf = 0
- x = string.rfind(file, '.')
- if x != -1 and file[x:] == '.hdf':
- do_hdf = 1
- ofs = []
- for loc in files[file]:
- parts = string.split(loc.location, ':')
- if len(parts) == 3 and parts[0] == 'ofs' and do_hdf == 0:
- ofs.append((int(parts[1]), int(parts[2]), loc.string_id))
- elif len(parts) == 2 and parts[0] == 'hdf' and do_hdf == 1:
- hdf_map.append((parts[1], loc.string_id))
- else:
- log("Invalid location for loc_id %s" % loc.loc_id)
- continue
- if not do_hdf:
- ofs.sort()
- data = open(self.root + '/' + file).read()
- # ok, now we split up the original data into sections
- x = 0
- n = len(data)
- out = []
- #sys.stderr.write("%s\n" % repr(ofs))
- while len(ofs):
- if ofs[0][0] > x:
- out.append(data[x:ofs[0][0]])
- x = ofs[0][0]
- elif ofs[0][0] == x:
- out.append(self.fetchString(ofs[0][2], lang))
- x = ofs[0][0] + ofs[0][1]
- ofs = ofs[1:]
- else:
- log("How did we get here? %s x=%d ofs=%d sid=%d" % (file, x, ofs[0][0], ofs[0][2]))
- log("Data[x:20]: %s" % data[x:20])
- log("Data[ofs:20]: %s" % data[ofs[0][0]:20])
- break
- if n > x:
- out.append(data[x:])
- odata = string.join(out, '')
- open(fname, 'w').write(odata)
-
- if lang == "hdf":
- langs = self.languages
- else:
- langs = [lang]
-
- for d_lang in langs:
- # dumping the extracted strings
- hdf = self.stringsHDF('Lang.Extracted', locations, d_lang, tiered=1)
- fname = "%s/gen/tmpl/lang_%s.hdf" % (self.root, d_lang)
- hdf.writeFile(fname)
- data = open(fname).read()
- fp = open(fname, 'w')
- fp.write('## AUTOMATICALLY GENERATED -- DO NOT EDIT\n\n')
- fp.write(data)
- fp.write('\n#include "lang_map.hdf"\n')
-
- # dumping the hdf strings file
- if d_lang == "en":
- map_file = "%s/gen/tmpl/lang_map.hdf" % (self.root)
- else:
- map_file = "%s/gen/tmpl/%s/lang_map.hdf" % (self.root, d_lang)
- try:
- os.makedirs(os.path.dirname(map_file))
- except OSError, reason:
- if reason[0] != 17: raise
- map_hdf = neo_util.HDF()
- for (name, s_id) in hdf_map:
- str = hdf.getValue('Lang.Extracted.%d.%d.%s' % (int(s_id) / TIER1_DIV, int(s_id) / TIER2_DIV, s_id), '')
- map_hdf.setValue(name, str)
- map_hdf.writeFile(map_file)
-
- def loadMap(self, file, prefix, lang):
- log("Loading map for language %s" % lang)
- hdf = neo_util.HDF()
- hdf.readFile(file)
- obj = hdf.getChild(prefix)
- updates = 0
- new_r = 0
- while obj is not None:
- s_id = obj.name()
- str = obj.value()
-
- try:
- map_r = self.tdb.maps.fetchRow( [('string_id', s_id), ('lang', lang)])
- except odb.eNoMatchingRows:
- map_r = self.tdb.maps.newRow()
- map_r.string_id = s_id
- map_r.lang = lang
- new_r = new_r + 1
-
- if map_r.string != str:
- updates = updates + 1
- map_r.string = str
- map_r.save()
-
- obj = obj.next()
- log("New maps: %d Updates: %d" % (new_r, updates - new_r))
-
-
-def main(argv):
- alist, args = getopt.getopt(argv[1:], "f:v:", ["help", "load=", "lang="])
-
- one_file = None
- verbose = 0
- load_file = None
- lang = 'en'
- for (field, val) in alist:
- if field == "--help":
- usage(argv[0])
- return -1
- if field == "-f":
- one_file = val
- if field == "-v":
- verbose = int(val)
- if field == "--load":
- load_file = val
- if field == "--lang":
- lang = val
-
-
- global DONE
-
- #signal.signal(signal.SIGTERM, handleSignal)
- #signal.signal(signal.SIGINT, handleSignal)
-
- log("trans: start")
-
- start_time = time.time()
-
- try:
- t = Translator()
- if load_file:
- t.loadMap(load_file, 'S', lang)
- else:
- locations = t.loadStrings(one_file, verbose=verbose)
- t.dumpStrings(locations)
- t.dumpFiles(locations, 'hdf')
- except KeyboardInterrupt:
- pass
- except:
- import handle_error
- handle_error.handleException("Translation Error")
-
-if __name__ == "__main__":
- main(sys.argv)
diff --git a/python/examples/trans/trans.sql b/python/examples/trans/trans.sql
deleted file mode 100644
index 9a5ca52..0000000
--- a/python/examples/trans/trans.sql
+++ /dev/null
@@ -1,26 +0,0 @@
-create table nt_trans_strings (
- string_id integer not null primary key auto_increment,
- string text,
-
- index(string(150))
-);
-
-create table nt_trans_locs (
- loc_id integer not null primary key auto_increment,
- string_id integer not null,
- version integer default 0,
- filename varchar(255),
- location varchar(255),
-
- index(string_id),
- index(filename)
-) TYPE=INNODB;
-
-create table nt_trans_maps (
- map_id integer not null primary key auto_increment,
- string_id integer not null,
- lang char(2),
- string text,
-
- index(string_id)
-) TYPE=INNODB;
diff --git a/python/examples/trans/tstart.py b/python/examples/trans/tstart.py
deleted file mode 100644
index 4e4dedd..0000000
--- a/python/examples/trans/tstart.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# this starts up the T-environment...
-#
-# The root dir should point to the top of the python tree
-
-
-import sys
-
-sys.path.insert(0, "../base") # pickup base libs
-
-sys.path.insert(0, "../../") # pickup neo_cgi.so
-
-# don't put anything above this because the path isn't
-# extended yet...
diff --git a/python/neo_cgi.c b/python/neo_cgi.c
deleted file mode 100644
index 1703a2f..0000000
--- a/python/neo_cgi.c
+++ /dev/null
@@ -1,951 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#include <Python.h>
-#include "ClearSilver.h"
-
-#define NEO_CGI_MODULE
-#include "p_neo_util.h"
-
-static PyObject *CGIFinishedException;
-
-#define CGIObjectCheck(a) (!(strcmp((a)->ob_type->tp_name, CGIObjectType.tp_name)))
-
-typedef struct _CGIObject
-{
- PyObject_HEAD
- CGI *cgi;
- PyObject *hdf;
- PyObject *upload_cb;
- PyObject *upload_rock;
- int upload_error;
-} CGIObject;
-
-static PyObject *p_cgi_value_get_attr (CGIObject *self, char *name);
-static void p_cgi_dealloc (CGIObject *ho);
-
-PyTypeObject CGIObjectType = {
- PyObject_HEAD_INIT(NULL)
- 0, /*ob_size*/
- "CGIObjectType", /*tp_name*/
- sizeof(CGIObject), /*tp_size*/
- 0, /*tp_itemsize*/
- /* methods */
- (destructor)p_cgi_dealloc, /*tp_dealloc*/
- 0, /*tp_print*/
- (getattrfunc)p_cgi_value_get_attr, /*tp_getattr*/
- 0, /*tp_setattr*/
- 0, /*tp_compare*/
- (reprfunc)0, /*tp_repr*/
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_as_hash */
-};
-
-static void p_cgi_dealloc (CGIObject *ho)
-{
- if (ho->cgi)
- {
- cgi_destroy (&(ho->cgi));
- }
- PyObject_DEL(ho);
-}
-
-PyObject * p_cgi_to_object (CGI *data)
-{
- PyObject *rv;
-
- if (data == NULL)
- {
- rv = Py_None;
- Py_INCREF (rv);
- }
- else
- {
- CGIObject *ho = PyObject_NEW (CGIObject, &CGIObjectType);
- if (ho == NULL) return NULL;
- ho->cgi = data;
- ho->hdf = p_hdf_to_object (data->hdf, 0);
- Py_INCREF(ho->hdf);
- rv = (PyObject *) ho;
- }
- return rv;
-}
-
-static PyObject * p_cgi_init (PyObject *self, PyObject *args)
-{
- CGI *cgi = NULL;
- NEOERR *err;
-
- err = cgi_init (&cgi, NULL);
- if (err) return p_neo_error (err);
- return p_cgi_to_object (cgi);
-}
-
-static PyObject * p_cgi_parse (PyObject *self, PyObject *args)
-{
- CGI *cgi = ((CGIObject *) self)->cgi;
- CGIObject *p_cgi = (CGIObject *) self;
- PyObject *rv;
- NEOERR *err;
-
- p_cgi->upload_error = 0;
-
- err = cgi_parse (cgi);
- if (err) return p_neo_error (err);
-
- if (p_cgi->upload_error)
- {
- p_cgi->upload_error = 0;
- return NULL;
- }
-
- rv = Py_None;
- Py_INCREF(rv);
- return rv;
-}
-
-static int python_upload_cb (CGI *cgi, int nread, int expected)
-{
- CGIObject *self = (CGIObject *)(cgi->data);
- PyObject *cb, *rock;
- PyObject *args, *result;
- int r;
-
- /* fprintf(stderr, "upload_cb: %d/%d\n", nread, expected); */
- cb = self->upload_cb;
- rock = self->upload_rock;
-
- if (cb == NULL) return 0;
- args = Py_BuildValue("(Oii)", rock, nread, expected);
-
- if (args == NULL) {
- self->upload_error = 1;
- return 1;
- }
- result = PyEval_CallObject(cb, args);
- Py_DECREF(args);
- if (result != NULL && !PyInt_Check(result)) {
- Py_DECREF(result);
- result = NULL;
- PyErr_SetString(PyExc_TypeError,
- "upload_cb () returned non-integer");
- self->upload_error = 1;
- return 1;
- }
- r = PyInt_AsLong(result);
- Py_DECREF(result);
- result = NULL;
- return r;
-}
-
-static PyObject * p_cgi_set_upload_cb (PyObject *self, PyObject *args)
-{
- CGI *cgi = ((CGIObject *) self)->cgi;
- CGIObject *p_cgi = (CGIObject *) self;
- PyObject *rock, *cb;
-
- if (!PyArg_ParseTuple(args, "OO:setUploadCB(rock, func)", &rock, &cb))
- return NULL;
-
- cgi->data = self;
- cgi->upload_cb = python_upload_cb;
- p_cgi->upload_cb = cb;
- p_cgi->upload_rock = rock;
- p_cgi->upload_error = 0;
- Py_INCREF(cb);
- Py_INCREF(rock);
-
- Py_INCREF(Py_None);
- return Py_None;
-}
-
-static PyObject * p_cgi_error (PyObject *self, PyObject *args)
-{
- CGI *cgi = ((CGIObject *) self)->cgi;
- char *s;
- PyObject *rv;
-
- if (!PyArg_ParseTuple(args, "s:error(str)", &s))
- return NULL;
-
- cgi_error (cgi, s);
- rv = Py_None;
- Py_INCREF(rv);
- return rv;
-}
-
-static PyObject * p_cgi_display (PyObject *self, PyObject *args)
-{
- CGI *cgi = ((CGIObject *) self)->cgi;
- char *file;
- PyObject *rv;
- NEOERR *err;
-
- if (!PyArg_ParseTuple(args, "s:display(file)", &file))
- return NULL;
-
- err = cgi_display (cgi, file);
- if (err) return p_neo_error (err);
- rv = Py_None;
- Py_INCREF(rv);
- return rv;
-}
-
-static PyObject * p_cgi_redirect (PyObject *self, PyObject *args)
-{
- CGI *cgi = ((CGIObject *) self)->cgi;
- char *s;
- PyObject *rv;
-
- if (!PyArg_ParseTuple(args, "s:redirect(str)", &s))
- return NULL;
-
- cgi_redirect (cgi, "%s", s);
- rv = Py_None;
- Py_INCREF(rv);
- return rv;
-}
-
-static PyObject * p_cgi_redirect_uri (PyObject *self, PyObject *args)
-{
- CGI *cgi = ((CGIObject *) self)->cgi;
- char *s;
- PyObject *rv;
-
- if (!PyArg_ParseTuple(args, "s:redirectUri(str)", &s))
- return NULL;
-
- cgi_redirect_uri (cgi, "%s", s);
- rv = Py_None;
- Py_INCREF(rv);
- return rv;
-}
-
-static PyObject * p_cgi_cookie_authority (PyObject *self, PyObject *args)
-{
- CGI *cgi = ((CGIObject *) self)->cgi;
- char *s, *host;
- PyObject *rv;
-
- if (!PyArg_ParseTuple(args, "s:cookieAuthority(host)", &host))
- return NULL;
-
- s = cgi_cookie_authority (cgi, host);
- if (s == NULL)
- {
- rv = Py_None;
- Py_INCREF(rv);
- }
- else
- {
- rv = Py_BuildValue ("s", s);
- }
- return rv;
-}
-
-static PyObject * p_cgi_cookie_set (PyObject *self, PyObject *args,
- PyObject *keywds)
-{
- CGI *cgi = ((CGIObject *) self)->cgi;
- char *name, *value, *path = NULL, *domain = NULL, *time_str = NULL;
- int persist = 0;
- int secure = 0;
- NEOERR *err;
- static char *kwlist[] = {"name", "value", "path", "domain", "time_str", "persist", "secure", NULL};
-
- if (!PyArg_ParseTupleAndKeywords(args, keywds, "ss|sssii:cookieSet()", kwlist, &name, &value, &path, &domain, &time_str, &persist, &secure))
- return NULL;
-
- err = cgi_cookie_set (cgi, name, value, path, domain, time_str, persist, secure);
- if (err) return p_neo_error (err);
- Py_INCREF(Py_None);
- return Py_None;
-}
-
-static PyObject * p_cgi_cookie_clear (PyObject *self, PyObject *args)
-{
- CGI *cgi = ((CGIObject *) self)->cgi;
- char *name, *domain = NULL, *path = NULL;
- NEOERR *err;
-
- if (!PyArg_ParseTuple(args, "s|ss:cookieClear(name, domain, path)", &name, &domain, &path))
- return NULL;
-
- err = cgi_cookie_clear (cgi, name, domain, path);
- if (err) return p_neo_error (err);
- Py_INCREF(Py_None);
- return Py_None;
-}
-
-static PyObject * p_cgi_filehandle (PyObject *self, PyObject *args)
-{
- CGI *cgi = ((CGIObject *) self)->cgi;
- char *name;
- FILE *fp;
-
- if (!PyArg_ParseTuple(args, "s:filehandle(form_name)", &name))
- return NULL;
-
- fp = cgi_filehandle (cgi, name);
- if (fp == NULL)
- {
- Py_INCREF(Py_None);
- return Py_None;
- }
- return PyFile_FromFile (fp, name, "w+", NULL);
-}
-
-static PyObject * p_cgi_cs_init (PyObject *self, PyObject *args)
-{
- CGI *cgi = ((CGIObject *) self)->cgi;
- NEOERR *err;
- CSPARSE *cs;
-
- if (!PyArg_ParseTuple(args, ":cs()"))
- return NULL;
-
- err = cgi_cs_init(cgi, &cs);
- if (err) return p_neo_error (err);
- return p_cs_to_object(cs);
-}
-
-static PyMethodDef CGIMethods[] =
-{
-#if 0
- {"debugInit", p_cgi_debug_init, METH_VARARGS, NULL},
- {"wrapInit", p_cgi_wrap_init, METH_VARARGS, NULL},
-#endif
- {"parse", p_cgi_parse, METH_VARARGS, NULL},
- {"setUploadCB", p_cgi_set_upload_cb, METH_VARARGS, NULL},
- {"error", p_cgi_error, METH_VARARGS, NULL},
- {"display", p_cgi_display, METH_VARARGS, NULL},
- {"redirect", p_cgi_redirect, METH_VARARGS, NULL},
- {"redirectUri", p_cgi_redirect_uri, METH_VARARGS, NULL},
- {"cookieAuthority", p_cgi_cookie_authority, METH_VARARGS, NULL},
- {"cookieSet", (PyCFunction)p_cgi_cookie_set, METH_VARARGS|METH_KEYWORDS, NULL},
- {"cookieClear", p_cgi_cookie_clear, METH_VARARGS, NULL},
- {"filehandle", p_cgi_filehandle, METH_VARARGS, NULL},
- {"cs", p_cgi_cs_init, METH_VARARGS, NULL},
- {NULL, NULL}
-};
-
-static PyObject * p_cgi_url_escape (PyObject *self, PyObject *args)
-{
- char *s, *esc, *o = NULL;
- NEOERR *err;
- PyObject *rv;
-
- if (!PyArg_ParseTuple(args, "s|s:urlEscape(str, other=None)", &s, &o))
- return NULL;
-
- err = cgi_url_escape_more (s, &esc, o);
- if (err) return p_neo_error (err);
- rv = Py_BuildValue ("s", esc);
- free (esc);
- return rv;
-}
-
-static PyObject * p_cgi_url_unescape (PyObject *self, PyObject *args)
-{
- char *s;
- PyObject *rv;
- char *r;
-
- if (!PyArg_ParseTuple(args, "s:urlUnescape(str)", &s))
- return NULL;
-
- r = strdup(s);
- if (r == NULL) return PyErr_NoMemory();
- cgi_url_unescape (r);
- rv = Py_BuildValue ("s", r);
- free (r);
- return rv;
-}
-
-static PyObject * p_html_escape (PyObject *self, PyObject *args)
-{
- char *s, *esc;
- NEOERR *err;
- PyObject *rv;
- int len;
-
- if (!PyArg_ParseTuple(args, "s#:htmlEscape(str)", &s, &len))
- return NULL;
-
- err = html_escape_alloc (s, len, &esc);
- if (err) return p_neo_error (err);
- rv = Py_BuildValue ("s", esc);
- free (esc);
- return rv;
-}
-
-static PyObject * p_html_strip (PyObject *self, PyObject *args)
-{
- char *s, *esc;
- NEOERR *err;
- PyObject *rv;
- int len;
-
- if (!PyArg_ParseTuple(args, "s#:htmlStrip(str)", &s, &len))
- return NULL;
-
- err = html_strip_alloc (s, len, &esc);
- if (err) return p_neo_error (err);
- rv = Py_BuildValue ("s", esc);
- free (esc);
- return rv;
-}
-
-static PyObject * p_text_html (PyObject *self, PyObject *args, PyObject *keywds)
-{
- char *s, *esc;
- NEOERR *err;
- PyObject *rv;
- int len;
- HTML_CONVERT_OPTS opts;
- static char *kwlist[] = {"text", "bounce_url", "url_class", "url_target", "mailto_class", "long_lines", "space_convert", "newlines_convert", "longline_width", "check_ascii_art", "link_name", NULL};
-
- /* These defaults all come from the old version */
- opts.bounce_url = NULL;
- opts.url_class = NULL;
- opts.url_target = "_blank";
- opts.mailto_class = NULL;
- opts.long_lines = 0;
- opts.space_convert = 0;
- opts.newlines_convert = 1;
- opts.longline_width = 75; /* This hasn't been used in a while, actually */
- opts.check_ascii_art = 1;
- opts.link_name = NULL;
-
- if (!PyArg_ParseTupleAndKeywords(args, keywds, "s#|ssssiiiiis:text2html(text)",
- kwlist,
- &s, &len, &(opts.bounce_url), &(opts.url_class), &(opts.url_target),
- &(opts.mailto_class), &(opts.long_lines), &(opts.space_convert),
- &(opts.newlines_convert), &(opts.longline_width), &(opts.check_ascii_art), &(opts.link_name)))
- return NULL;
-
- err = convert_text_html_alloc_options (s, len, &esc, &opts);
- if (err) return p_neo_error (err);
- rv = Py_BuildValue ("s", esc);
- free (esc);
- return rv;
-}
-
-PyObject *p_cgi_value_get_attr (CGIObject *ho, char *name)
-{
- if (!strcmp(name, "hdf"))
- {
- Py_INCREF(ho->hdf);
- return ho->hdf;
- }
- return Py_FindMethod(CGIMethods, (PyObject *)ho, name);
-}
-
-/* Enable wrapping of newlib stdin/stdout output to go through python */
-typedef struct wrapper_data
-{
- PyObject *p_stdin;
- PyObject *p_stdout;
- PyObject *p_env;
-} WRAPPER_DATA;
-
-static WRAPPER_DATA Wrapper = {NULL, NULL, NULL};
-
-static char cgiwrap_doc[] = "cgiwrap(stdin, stdout, env)\nMethod that will cause all cgiwrapped stdin/stdout functions to be redirected to the python stdin/stdout file objects specified. Also redirect getenv/putenv calls (env should be either a python dictionary or os.environ)";
-static PyObject * cgiwrap (PyObject *self, PyObject *args)
-{
- PyObject *p_stdin;
- PyObject *p_stdout;
- PyObject *p_env;
-
- if (!PyArg_ParseTuple(args, "OOO:cgiwrap(stdin, stdout, env)", &p_stdin, &p_stdout, &p_env))
- return NULL;
-
- if (p_stdin != Py_None)
- {
- if (Wrapper.p_stdin != NULL)
- {
- Py_DECREF (Wrapper.p_stdin);
- }
- Wrapper.p_stdin = p_stdin;
- Py_INCREF (Wrapper.p_stdin);
- }
- if (p_stdout != Py_None)
- {
- if (Wrapper.p_stdout != NULL)
- {
- Py_DECREF (Wrapper.p_stdout);
- }
- Wrapper.p_stdout = p_stdout;
- Py_INCREF (Wrapper.p_stdout);
- }
- if (p_env != Py_None)
- {
- if (Wrapper.p_env != NULL)
- {
- Py_DECREF (Wrapper.p_env);
- }
- Wrapper.p_env = p_env;
- Py_INCREF (Wrapper.p_env);
- }
-
- Py_INCREF(Py_None);
- return Py_None;
-}
-
-static int p_writef (void *data, const char *fmt, va_list ap)
-{
- WRAPPER_DATA *wrap = (WRAPPER_DATA *)data;
- PyObject *str;
- char *buf;
- int len;
- int err;
-
-
- buf = vsprintf_alloc(fmt, ap);
- len = visprintf_alloc(&buf, fmt, ap);
-
- if (buf == NULL)
- return 0;
-
- str = PyString_FromStringAndSize (buf, len);
- free(buf);
-
- err = PyFile_WriteObject(str, wrap->p_stdout, Py_PRINT_RAW);
- Py_DECREF(str);
-
- if (err == 0)
- {
- PyErr_Clear();
- return len;
- }
- PyErr_Clear();
- return err;
-}
-
-static int p_write (void *data, const char *buf, int len)
-{
- WRAPPER_DATA *wrap = (WRAPPER_DATA *)data;
- PyObject *s;
- int err;
-
- s = PyString_FromStringAndSize (buf, len);
-
- err = PyFile_WriteObject(s, wrap->p_stdout, Py_PRINT_RAW);
- Py_DECREF(s);
-
- if (err == 0)
- {
- PyErr_Clear();
- return len;
- }
- PyErr_Clear();
- return err;
-}
-
-/* Similar to the PyFile_GetLine function, this one invokes read on the
- * file object */
-static PyObject *PyFile_Read (PyObject *f, int n)
-{
- if (f == NULL)
- {
- PyErr_BadInternalCall();
- return NULL;
- }
- /* If this was in the python fileobject code, we could handle this
- * directly for builtin file objects. Oh well. */
- /* if (!PyFile_Check(f))*/
- else
- {
- PyObject *reader;
- PyObject *args;
- PyObject *result;
- reader = PyObject_GetAttrString(f, "read");
- if (reader == NULL)
- return NULL;
- if (n <= 0)
- args = Py_BuildValue("()");
- else
- args = Py_BuildValue("(i)", n);
- if (args == NULL) {
- Py_DECREF(reader);
- return NULL;
- }
- result = PyEval_CallObject(reader, args);
- Py_DECREF(reader);
- Py_DECREF(args);
- if (result != NULL && !PyString_Check(result)) {
- Py_DECREF(result);
- result = NULL;
- PyErr_SetString(PyExc_TypeError,
- "object.read() returned non-string");
- }
- return result;
- }
-}
-
-static int p_read (void *data, char *ptr, int len)
-{
- WRAPPER_DATA *wrap = (WRAPPER_DATA *)data;
- PyObject *buf;
- char *s;
-
- buf = PyFile_Read (wrap->p_stdin, len);
-
- if (buf == NULL)
- {
- PyErr_Clear();
- return -1;
- }
-
- len = PyString_Size(buf);
- s = PyString_AsString(buf);
-
- memcpy (ptr, s, len);
-
- Py_DECREF(buf);
-
- PyErr_Clear();
- return len;
-}
-
-/* We can't really have an error return from this (and the other
- * cgiwrap) function, because the API doesn't have an error return,
- * and if we get back to python, the error will occur at the next random
- * place that python actually checks for errors independent of an error
- * return. Not the best way to do things, but its what we've got. Some
- * of these we can check for in cgiWrap() */
-static char *p_getenv (void *data, const char *s)
-{
- WRAPPER_DATA *wrap = (WRAPPER_DATA *)data;
- PyObject *get;
- PyObject *args = NULL;
- PyObject *result;
- char *ret = NULL;
-
- get = PyObject_GetAttrString(wrap->p_env, "__getitem__");
- if (get != NULL)
- {
- args = Py_BuildValue("(s)", s);
- if (args == NULL) {
- Py_DECREF(get);
- PyErr_Clear();
- return NULL;
- }
- }
- else
- {
- /* Python 1.5.2 and earlier don't have __getitem__ on the standard
- * dict object, so we'll just use get for them */
-
- get = PyObject_GetAttrString(wrap->p_env, "get");
- if (get != NULL)
- {
- args = Py_BuildValue("(s,O)", s, Py_None);
- if (args == NULL)
- {
- Py_DECREF(get);
- PyErr_Clear();
- return NULL;
- }
- }
- }
- if (get == NULL)
- {
- ne_warn("Unable to get __getitem__ from env");
- PyErr_Clear();
- return NULL;
- }
- result = PyEval_CallObject(get, args);
- Py_DECREF(get);
- Py_DECREF(args);
- if (result != NULL && !PyString_Check(result) && (result != Py_None))
- {
- Py_DECREF(result);
- result = NULL;
- PyErr_SetString(PyExc_TypeError,
- "env.get() returned non-string");
- }
- if (result != NULL && result != Py_None)
- {
- ret = strdup (PyString_AsString(result));
- Py_DECREF (result);
- }
-
- PyErr_Clear();
- return ret;
-}
-
-static int p_iterenv (void *data, int x, char **rk, char **rv)
-{
- WRAPPER_DATA *wrap = (WRAPPER_DATA *)data;
- PyObject *items;
- PyObject *env_list;
- PyObject *result;
- PyObject *k, *v;
-
- items = PyObject_GetAttrString(wrap->p_env, "items");
- if (items == NULL)
- {
- ne_warn ("p_iterenv: Unable to get items method");
- PyErr_Clear();
- return -1;
- }
- env_list = PyEval_CallObject(items, NULL);
- Py_DECREF(items);
- if (env_list == NULL)
- {
- ne_warn ("p_iterenv: Unable to call items method");
- PyErr_Clear();
- return -1;
- }
- if (x >= PyList_Size(env_list))
- {
- *rk = NULL;
- *rv = NULL;
- Py_DECREF(env_list);
- return 0;
- }
- result = PyList_GetItem (env_list, x);
- if (result == NULL)
- {
- ne_warn ("p_iterenv: Unable to get env %d", x);
- Py_DECREF(env_list);
- PyErr_Clear();
- return -1;
- }
- k = PyTuple_GetItem (result, 0);
- v = PyTuple_GetItem (result, 1);
- if (k == NULL || v == NULL)
- {
- ne_warn ("p_iterenv: Unable to get k,v %p,%p", k, v);
- Py_DECREF(env_list);
- PyErr_Clear();
- return -1;
- }
- *rk = strdup(PyString_AsString(k));
- *rv = strdup(PyString_AsString(v));
- if (*rk == NULL || *rv == NULL)
- {
- if (*rk) free (*rk);
- if (*rv) free (*rv);
- Py_DECREF(env_list);
- PyErr_Clear();
- return -1;
- }
-
- Py_DECREF(env_list);
- PyErr_Clear();
- return 0;
-}
-
-static int p_putenv (void *data, const char *k, const char *v)
-{
- WRAPPER_DATA *wrap = (WRAPPER_DATA *)data;
- PyObject *set;
- PyObject *args;
- PyObject *result;
-
- if (k == NULL || v == NULL) return -1;
-
- set = PyObject_GetAttrString(wrap->p_env, "__setitem__");
- if (set == NULL)
- {
- PyErr_Clear();
- return -1;
- }
- args = Py_BuildValue("(s,s)", k, v);
-
- if (args == NULL) {
- Py_DECREF(set);
- PyErr_Clear();
- return -1;
- }
- result = PyEval_CallObject(set, args);
- Py_DECREF(set);
- Py_DECREF(args);
- if (result == NULL)
- {
- PyErr_Clear();
- return -1;
- }
- Py_DECREF(result);
- PyErr_Clear();
- return 0;
-}
-
-static void p_cgiwrap_init(PyObject *m)
-{
- PyObject *sys, *os, *p_stdin, *p_stdout, *args, *p_env;
-#if 0
- PyObject *argv;
- int x;
-#endif
-
- /* Set up the python wrapper
- * This might not be enough to actually continue to point to
- * sys.stdin/sys.stdout, we'd probably have to actually do the lookup
- * every time... if we need that functionality
- */
- sys = PyImport_ImportModule("sys");
- os = PyImport_ImportModule("os");
- if (sys)
- {
- p_stdin = PyObject_GetAttrString(sys, "stdin");
- p_stdout = PyObject_GetAttrString(sys, "stdout");
-#if 0
- argv = PyObject_GetAttrString(sys, "argv");
- if (argv)
- {
- Argc = PyList_Size (argv);
- if (Argc != -1)
- {
-
- Argv = (char **) malloc (sizeof (char *) * (Argc+1));
- for (x = 0; x < Argc; x++)
- {
- PyObject *a;
- char *b;
-
- a = PyList_GetItem (argv, x);
- if (a == NULL)
- break;
- b = PyString_AsString(a);
- if (b == NULL)
- break;
- Argv[x] = b;
- }
- Argv[x] = NULL;
- }
- }
-#endif
- if (os)
- {
- p_env = PyObject_GetAttrString(os, "environ");
- }
- else
- {
- Py_INCREF(Py_None);
- p_env = Py_None;
- }
- args = Py_BuildValue("(O,O,O)", p_stdin, p_stdout, p_env);
- if (args)
- {
- cgiwrap_init_emu (&Wrapper, p_read, p_writef, p_write, p_getenv, p_putenv, p_iterenv);
- cgiwrap (m, args);
- Py_DECREF(args);
- }
- }
-}
-
-static PyObject * p_ignore (PyObject *self, PyObject *args)
-{
- int i = 0;
-
- if (!PyArg_ParseTuple(args, "i:IgnoreEmptyFormVars(bool)", &i))
- return NULL;
-
- IgnoreEmptyFormVars = i;
- Py_INCREF(Py_None);
- return Py_None;
-}
-
-static PyObject * p_export_date (PyObject *self, PyObject *args)
-{
- NEOERR *err;
- PyObject *ho;
- int i = 0;
- char *prefix;
- char *timezone;
- HDF *hdf;
-
- if (!PyArg_ParseTuple(args, "Ossi:exportDate(hdf, prefix, timezone, time_t)", &ho, &prefix, &timezone, &i))
- return NULL;
-
- hdf = p_object_to_hdf (ho);
- if (hdf == NULL)
- {
- PyErr_SetString(PyExc_TypeError, "First argument must be an HDF Object");
- return NULL;
- }
-
- err = export_date_time_t (hdf, prefix, timezone, i);
- if (err) return p_neo_error (err);
-
- Py_INCREF(Py_None);
- return Py_None;
-}
-
-static PyObject * p_update (PyObject *self, PyObject *args)
-{
- if (_PyImport_FindExtension("neo_util","neo_util") == NULL)
- initneo_util();
-
- if (_PyImport_FindExtension("neo_cs","neo_cs") == NULL)
- initneo_cs();
-
- Py_INCREF(Py_None);
- return Py_None;
-}
-
-static PyMethodDef ModuleMethods[] =
-{
- {"CGI", p_cgi_init, METH_VARARGS, NULL},
- {"urlEscape", p_cgi_url_escape, METH_VARARGS, NULL},
- {"urlUnescape", p_cgi_url_unescape, METH_VARARGS, NULL},
- {"htmlEscape", p_html_escape, METH_VARARGS, NULL},
- {"htmlStrip", p_html_strip, METH_VARARGS, NULL},
- {"text2html", (PyCFunction)p_text_html, METH_VARARGS|METH_KEYWORDS, NULL},
- {"cgiWrap", cgiwrap, METH_VARARGS, cgiwrap_doc},
- {"IgnoreEmptyFormVars", p_ignore, METH_VARARGS, NULL},
- {"exportDate", p_export_date, METH_VARARGS, NULL},
- {"update", p_update, METH_VARARGS, NULL},
- {NULL, NULL}
-};
-
-DL_EXPORT(void) initneo_cgi(void)
-{
- PyObject *m, *d;
- static void *NEO_PYTHON_API[P_NEO_CGI_POINTERS];
- PyObject *c_api_object;
-
- CGIObjectType.ob_type = &PyType_Type;
-
-
-
- initneo_util();
- _PyImport_FixupExtension("neo_util", "neo_util");
-
- initneo_cs();
- _PyImport_FixupExtension("neo_cs", "neo_cs");
-
- m = Py_InitModule("neo_cgi", ModuleMethods);
- p_cgiwrap_init (m);
- d = PyModule_GetDict(m);
- CGIFinishedException = PyErr_NewException("neo_cgi.CGIFinished", NULL, NULL);
- PyDict_SetItemString(d, "CGIFinished", CGIFinishedException);
-
- /* Initialize the C API Pointer array */
- NEO_PYTHON_API[P_HDF_TO_OBJECT_NUM] = (void *)p_hdf_to_object;
- NEO_PYTHON_API[P_OBJECT_TO_HDF_NUM] = (void *)p_object_to_hdf;
- NEO_PYTHON_API[P_NEO_ERROR_NUM] = (void *)p_neo_error;
-
- /* create a CObject containing the API pointer array's address */
- c_api_object = PyCObject_FromVoidPtr((void *)NEO_PYTHON_API, NULL);
- if (c_api_object != NULL) {
- /* create a name for this object in the module's namespace */
- PyDict_SetItemString(d, "_C_API", c_api_object);
- Py_DECREF(c_api_object);
- PyDict_SetItemString(d, "_C_API_NUM", PyInt_FromLong(P_NEO_CGI_POINTERS));
- }
-}
diff --git a/python/neo_cgi.def b/python/neo_cgi.def
deleted file mode 100644
index 93e164d..0000000
--- a/python/neo_cgi.def
+++ /dev/null
@@ -1,5 +0,0 @@
-
-EXPORTS
- initneo_cgi
- initneo_util
- initneo_cs \ No newline at end of file
diff --git a/python/neo_cs.c b/python/neo_cs.c
deleted file mode 100644
index 401489e..0000000
--- a/python/neo_cs.c
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#include <Python.h>
-#include "ClearSilver.h"
-
-#define NEO_CGI_MODULE
-#include "p_neo_util.h"
-
-
-#define CSObjectCheck(a) (!(strcmp((a)->ob_type->tp_name, CSObjectType.tp_name)))
-
-typedef struct _CSObject
-{
- PyObject_HEAD
- CSPARSE *data;
-} CSObject;
-
-static PyObject *p_cs_value_get_attr (CSObject *self, char *name);
-static void p_cs_dealloc (CSObject *ho);
-
-static PyTypeObject CSObjectType =
-{
- PyObject_HEAD_INIT(NULL)
- 0, /*ob_size*/
- "CSObjectType", /*tp_name*/
- sizeof(CSObject), /*tp_size*/
- 0, /*tp_itemsize*/
- /* methods */
- (destructor)p_cs_dealloc, /*tp_dealloc*/
- 0, /*tp_print*/
- (getattrfunc)p_cs_value_get_attr, /*tp_getattr*/
- 0, /*tp_setattr*/
- 0, /*tp_compare*/
- (reprfunc)0, /*tp_repr*/
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_as_hash */
-};
-
-static void p_cs_dealloc (CSObject *ho)
-{
- /* ne_warn("deallocating hdf: %X", ho); */
- if (ho->data)
- {
- cs_destroy (&(ho->data));
- }
- PyObject_DEL(ho);
-}
-
-PyObject * p_cs_to_object (CSPARSE *data)
-{
- PyObject *rv;
-
- if (data == NULL)
- {
- rv = Py_None;
- Py_INCREF (rv);
- }
- else
- {
- CSObject *ho = PyObject_NEW (CSObject, &CSObjectType);
- if (ho == NULL) return NULL;
- ho->data = data;
- rv = (PyObject *) ho;
- /* ne_warn("allocating cs: %X", ho); */
- }
- return rv;
-}
-
-static PyObject * p_cs_init (PyObject *self, PyObject *args)
-{
- CSPARSE *cs = NULL;
- NEOERR *err;
- PyObject *ho;
- HDF *hdf;
-
- if (!PyArg_ParseTuple(args, "O:CS(HDF Object)", &ho))
- return NULL;
-
- hdf = p_object_to_hdf (ho);
- if (hdf == NULL)
- {
- PyErr_BadArgument();
- return NULL;
- }
-
- err = cs_init (&cs, hdf);
- if (err) return p_neo_error (err);
- err = cgi_register_strfuncs(cs);
- if (err) return p_neo_error (err);
- return p_cs_to_object (cs);
-}
-
-static PyObject * p_cs_parse_file (PyObject *self, PyObject *args)
-{
- CSObject *co = (CSObject *)self;
- NEOERR *err;
- char *path;
-
- if (!PyArg_ParseTuple(args, "s:parseFile(path)", &path))
- return NULL;
-
- err = cs_parse_file (co->data, path);
- if (err) return p_neo_error(err);
- Py_INCREF(Py_None);
- return Py_None;
-}
-
-static PyObject * p_cs_parse_str (PyObject *self, PyObject *args)
-{
- CSObject *co = (CSObject *)self;
- NEOERR *err;
- char *s, *ms;
- int l;
-
- if (!PyArg_ParseTuple(args, "s#:parseStr(string)", &s, &l))
- return NULL;
-
- ms = strdup(s);
- if (ms == NULL) return PyErr_NoMemory();
-
- err = cs_parse_string (co->data, ms, l);
- if (err) return p_neo_error(err);
- Py_INCREF(Py_None);
- return Py_None;
-}
-
-static NEOERR *render_cb (void *ctx, char *buf)
-{
- STRING *str= (STRING *)ctx;
-
- return nerr_pass(string_append(str, buf));
-}
-
-static PyObject * p_cs_render (PyObject *self, PyObject *args)
-{
- CSObject *co = (CSObject *)self;
- NEOERR *err;
- STRING str;
- PyObject *rv;
-
- string_init(&str);
- err = cs_render (co->data, &str, render_cb);
- if (err) return p_neo_error(err);
- rv = Py_BuildValue ("s", str.buf);
- string_clear (&str);
- return rv;
-}
-
-static PyMethodDef CSMethods[] =
-{
- {"parseFile", p_cs_parse_file, METH_VARARGS, NULL},
- {"parseStr", p_cs_parse_str, METH_VARARGS, NULL},
- {"render", p_cs_render, METH_VARARGS, NULL},
- {NULL, NULL}
-};
-
-static PyMethodDef ModuleMethods[] =
-{
- {"CS", p_cs_init, METH_VARARGS, NULL},
- {NULL, NULL}
-};
-
-PyObject *p_cs_value_get_attr (CSObject *ho, char *name)
-{
- return Py_FindMethod(CSMethods, (PyObject *)ho, name);
-}
-
-DL_EXPORT(void) initneo_cs(void)
-{
- PyObject *m, *d;
-
- CSObjectType.ob_type = &PyType_Type;
-
- m = Py_InitModule("neo_cs", ModuleMethods);
- d = PyModule_GetDict(m);
-}
diff --git a/python/neo_util.c b/python/neo_util.c
deleted file mode 100644
index 7f14ec6..0000000
--- a/python/neo_util.c
+++ /dev/null
@@ -1,708 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#include <Python.h>
-#include "ClearSilver.h"
-
-#define NEO_CGI_MODULE
-#include "p_neo_util.h"
-
-static PyObject *NeoError;
-static PyObject *NeoParseError;
-
-PyObject * p_neo_error (NEOERR *err)
-{
- STRING str;
-
- string_init (&str);
- if (nerr_match(err, NERR_PARSE))
- {
- nerr_error_string (err, &str);
- PyErr_SetString (NeoParseError, str.buf);
- }
- else
- {
- nerr_error_traceback (err, &str);
- PyErr_SetString (NeoError, str.buf);
- }
- string_clear (&str);
- return NULL;
-}
-
-#define HDFObjectCheck(a) (!(strcmp((a)->ob_type->tp_name, HDFObjectType.tp_name)))
-
-typedef struct _HDFObject
-{
- PyObject_HEAD
- HDF *data;
- int dealloc;
-} HDFObject;
-
-static PyObject *p_hdf_value_get_attr (HDFObject *self, char *name);
-static void p_hdf_dealloc (HDFObject *ho);
-
-static PyTypeObject HDFObjectType = {
- PyObject_HEAD_INIT(NULL)
- 0, /*ob_size*/
- "HDFObjectType", /*tp_name*/
- sizeof(HDFObject), /*tp_size*/
- 0, /*tp_itemsize*/
- /* methods */
- (destructor)p_hdf_dealloc, /*tp_dealloc*/
- 0, /*tp_print*/
- (getattrfunc)p_hdf_value_get_attr, /*tp_getattr*/
- 0, /*tp_setattr*/
- 0, /*tp_compare*/
- (reprfunc)0, /*tp_repr*/
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_as_hash */
-};
-
-
-static void p_hdf_dealloc (HDFObject *ho)
-{
- /* ne_warn("deallocating hdf: %X", ho); */
- if (ho->data && ho->dealloc)
- {
- hdf_destroy (&(ho->data));
- }
- PyObject_DEL(ho);
-}
-
-PyObject * p_hdf_to_object (HDF *data, int dealloc)
-{
- PyObject *rv;
-
- if (data == NULL)
- {
- rv = Py_None;
- Py_INCREF (rv);
- }
- else
- {
- HDFObject *ho = PyObject_NEW (HDFObject, &HDFObjectType);
- if (ho == NULL) return NULL;
- ho->data = data;
- ho->dealloc = dealloc;
- rv = (PyObject *) ho;
- /* ne_warn("allocating hdf: %X", ho); */
- }
- return rv;
-}
-
-HDF * p_object_to_hdf (PyObject *ho)
-{
- if (HDFObjectCheck(ho))
- {
- return ((HDFObject *)ho)->data;
- }
- return NULL;
-}
-
-static PyObject * p_hdf_init (PyObject *self, PyObject *args)
-{
- HDF *hdf = NULL;
- NEOERR *err;
-
- err = hdf_init (&hdf);
- if (err) return p_neo_error (err);
- return p_hdf_to_object (hdf, 1);
-}
-
-static PyObject * p_hdf_get_int_value (PyObject *self, PyObject *args)
-{
- HDFObject *ho = (HDFObject *)self;
- PyObject *rv;
- char *name;
- int r, d = 0;
-
- if (!PyArg_ParseTuple(args, "si:getIntValue(name, default)", &name, &d))
- return NULL;
-
- r = hdf_get_int_value (ho->data, name, d);
- rv = Py_BuildValue ("i", r);
- return rv;
-}
-
-static PyObject * p_hdf_get_value (PyObject *self, PyObject *args)
-{
- HDFObject *ho = (HDFObject *)self;
- PyObject *rv;
- char *name;
- char *r, *d = NULL;
-
- if (!PyArg_ParseTuple(args, "ss:getValue(name, default)", &name, &d))
- return NULL;
-
- r = hdf_get_value (ho->data, name, d);
- rv = Py_BuildValue ("s", r);
- return rv;
-}
-
-static PyObject * p_hdf_get_obj (PyObject *self, PyObject *args)
-{
- HDFObject *ho = (HDFObject *)self;
- PyObject *rv;
- char *name;
- HDF *r;
-
- if (!PyArg_ParseTuple(args, "s:getObj(name)", &name))
- return NULL;
-
- r = hdf_get_obj (ho->data, name);
- if (r == NULL)
- {
- rv = Py_None;
- Py_INCREF(rv);
- return rv;
- }
- rv = p_hdf_to_object (r, 0);
- return rv;
-}
-
-static PyObject * p_hdf_get_child (PyObject *self, PyObject *args)
-{
- HDFObject *ho = (HDFObject *)self;
- PyObject *rv;
- char *name;
- HDF *r;
-
- if (!PyArg_ParseTuple(args, "s:getChild(name)", &name))
- return NULL;
-
- r = hdf_get_child (ho->data, name);
- if (r == NULL)
- {
- rv = Py_None;
- Py_INCREF(rv);
- return rv;
- }
- rv = p_hdf_to_object (r, 0);
- return rv;
-}
-
-static PyObject * p_hdf_get_attr (PyObject *self, PyObject *args)
-{
- HDFObject *ho = (HDFObject *)self;
- PyObject *rv, *item;
- char *name;
- HDF_ATTR *attr;
-
- if (!PyArg_ParseTuple(args, "s:getAttrs(name)", &name))
- return NULL;
-
- rv = PyList_New(0);
- if (rv == NULL) return NULL;
- Py_INCREF(rv);
- attr = hdf_get_attr (ho->data, name);
- while (attr != NULL)
- {
- item = Py_BuildValue("(s,s)", attr->key, attr->value);
- if (item == NULL)
- {
- Py_DECREF(rv);
- return NULL;
- }
- if (PyList_Append(rv, item) == -1)
- {
- Py_DECREF(rv);
- return NULL;
- }
- attr = attr->next;
- }
- return rv;
-}
-
-static PyObject * p_hdf_obj_attr (PyObject *self, PyObject *args)
-{
- HDFObject *ho = (HDFObject *)self;
- PyObject *rv, *item;
- HDF_ATTR *attr;
-
- rv = PyList_New(0);
- if (rv == NULL) return NULL;
- Py_INCREF(rv);
- attr = hdf_obj_attr (ho->data);
- while (attr != NULL)
- {
- item = Py_BuildValue("(s,s)", attr->key, attr->value);
- if (item == NULL)
- {
- Py_DECREF(rv);
- return NULL;
- }
- if (PyList_Append(rv, item) == -1)
- {
- Py_DECREF(rv);
- return NULL;
- }
- attr = attr->next;
- }
- return rv;
-}
-
-static PyObject * p_hdf_obj_child (PyObject *self, PyObject *args)
-{
- HDFObject *ho = (HDFObject *)self;
- PyObject *rv;
- HDF *r;
-
- r = hdf_obj_child (ho->data);
- if (r == NULL)
- {
- rv = Py_None;
- Py_INCREF(rv);
- return rv;
- }
- rv = p_hdf_to_object (r, 0);
- return rv;
-}
-
-static PyObject * p_hdf_obj_next (PyObject *self, PyObject *args)
-{
- HDFObject *ho = (HDFObject *)self;
- PyObject *rv;
- HDF *r;
-
- r = hdf_obj_next (ho->data);
- if (r == NULL)
- {
- rv = Py_None;
- Py_INCREF(rv);
- return rv;
- }
- rv = p_hdf_to_object (r, 0);
- return rv;
-}
-
-static PyObject * p_hdf_obj_top (PyObject *self, PyObject *args)
-{
- HDFObject *ho = (HDFObject *)self;
- PyObject *rv;
- HDF *r;
-
- r = hdf_obj_top (ho->data);
- if (r == NULL)
- {
- rv = Py_None;
- Py_INCREF(rv);
- return rv;
- }
- rv = p_hdf_to_object (r, 0);
- return rv;
-}
-
-static PyObject * p_hdf_obj_name (PyObject *self, PyObject *args)
-{
- HDFObject *ho = (HDFObject *)self;
- PyObject *rv;
- char *r;
-
- r = hdf_obj_name (ho->data);
- if (r == NULL)
- {
- rv = Py_None;
- Py_INCREF(rv);
- return rv;
- }
- rv = Py_BuildValue ("s", r);
- return rv;
-}
-
-static PyObject * p_hdf_obj_value (PyObject *self, PyObject *args)
-{
- HDFObject *ho = (HDFObject *)self;
- PyObject *rv;
- char *r;
-
- r = hdf_obj_value (ho->data);
- if (r == NULL)
- {
- rv = Py_None;
- Py_INCREF(rv);
- return rv;
- }
- rv = Py_BuildValue ("s", r);
- return rv;
-}
-
-static PyObject * p_hdf_set_value (PyObject *self, PyObject *args)
-{
- HDFObject *ho = (HDFObject *)self;
- PyObject *rv;
- char *name, *value;
- NEOERR *err;
- int nlen = 0;
- int vlen = 0;
-
- if (!PyArg_ParseTuple(args, "s#s#:setValue(name, value)", &name, &nlen, &value, &vlen))
- return NULL;
-
- err = hdf_set_value (ho->data, name, value);
- if (err) return p_neo_error(err);
-
- rv = Py_None;
- Py_INCREF(rv);
- return rv;
-}
-
-static PyObject * p_hdf_set_attr (PyObject *self, PyObject *args)
-{
- HDFObject *ho = (HDFObject *)self;
- PyObject *rv;
- char *name, *value, *key;
- NEOERR *err;
-
- if (!PyArg_ParseTuple(args, "ssO:setAttr(name, key, value)", &name, &key, &rv))
- return NULL;
-
- if (PyString_Check(rv))
- {
- value = PyString_AsString(rv);
- }
- else if (rv == Py_None)
- {
- value = NULL;
- }
- else
- {
- return PyErr_Format(PyExc_TypeError, "Invalid type for value, expected None or string");
- }
- err = hdf_set_attr (ho->data, name, key, value);
- if (err) return p_neo_error(err);
-
- rv = Py_None;
- Py_INCREF(rv);
- return rv;
-}
-
-static PyObject * p_hdf_read_file (PyObject *self, PyObject *args)
-{
- HDFObject *ho = (HDFObject *)self;
- PyObject *rv;
- char *path;
- NEOERR *err;
-
- if (!PyArg_ParseTuple(args, "s:readFile(path)", &path))
- return NULL;
-
- err = hdf_read_file (ho->data, path);
- if (err) return p_neo_error(err);
-
- rv = Py_None;
- Py_INCREF(rv);
- return rv;
-}
-
-static PyObject * p_hdf_write_file (PyObject *self, PyObject *args)
-{
- HDFObject *ho = (HDFObject *)self;
- PyObject *rv;
- char *path;
- NEOERR *err;
-
- if (!PyArg_ParseTuple(args, "s:writeFile(path)", &path))
- return NULL;
-
- err = hdf_write_file (ho->data, path);
- if (err) return p_neo_error(err);
-
- rv = Py_None;
- Py_INCREF(rv);
- return rv;
-}
-
-static PyObject * p_hdf_write_file_atomic (PyObject *self, PyObject *args)
-{
- HDFObject *ho = (HDFObject *)self;
- PyObject *rv;
- char *path;
- NEOERR *err;
-
- if (!PyArg_ParseTuple(args, "s:writeFile(path)", &path))
- return NULL;
-
- err = hdf_write_file_atomic (ho->data, path);
- if (err) return p_neo_error(err);
-
- rv = Py_None;
- Py_INCREF(rv);
- return rv;
-}
-
-static PyObject * p_hdf_remove_tree (PyObject *self, PyObject *args)
-{
- HDFObject *ho = (HDFObject *)self;
- PyObject *rv;
- char *name;
- NEOERR *err;
-
- if (!PyArg_ParseTuple(args, "s:removeTree(name)", &name))
- return NULL;
-
- err = hdf_remove_tree (ho->data, name);
- if (err) return p_neo_error(err);
-
- rv = Py_None;
- Py_INCREF(rv);
- return rv;
-}
-
-static PyObject * p_hdf_dump (PyObject *self, PyObject *args)
-{
- HDFObject *ho = (HDFObject *)self;
- PyObject *rv;
- NEOERR *err;
- STRING str;
-
- string_init (&str);
-
- err = hdf_dump_str (ho->data, NULL, 0, &str);
- if (err) return p_neo_error(err);
- rv = Py_BuildValue ("s", str.buf);
- string_clear (&str);
- return rv;
-}
-
-static PyObject * p_hdf_write_string (PyObject *self, PyObject *args)
-{
- HDFObject *ho = (HDFObject *)self;
- PyObject *rv;
- NEOERR *err;
- char *s = NULL;
-
- err = hdf_write_string (ho->data, &s);
- if (err) return p_neo_error(err);
- rv = Py_BuildValue ("s", s);
- if (s) free(s);
- return rv;
-}
-
-static PyObject * p_hdf_read_string (PyObject *self, PyObject *args)
-{
- HDFObject *ho = (HDFObject *)self;
- NEOERR *err;
- char *s = NULL;
- int ignore = 0;
-
- if (!PyArg_ParseTuple(args, "s|i:readString(string)", &s, &ignore))
- return NULL;
-
- err = hdf_read_string_ignore (ho->data, s, ignore);
- if (err) return p_neo_error(err);
- Py_INCREF (Py_None);
- return Py_None;
-}
-
-static PyObject * p_hdf_copy (PyObject *self, PyObject *args)
-{
- HDFObject *ho = (HDFObject *)self;
- HDF *src = NULL;
- PyObject *rv, *o = NULL;
- char *name;
- NEOERR *err;
-
- if (!PyArg_ParseTuple(args, "sO:copy(name, src_hdf)", &name, &o))
- return NULL;
-
- src = p_object_to_hdf (o);
- if (src == NULL)
- {
- PyErr_Format(PyExc_TypeError, "second argument must be an HDFObject");
- return NULL;
- }
-
- err = hdf_copy (ho->data, name, src);
- if (err) return p_neo_error(err);
-
- rv = Py_None;
- Py_INCREF(rv);
- return rv;
-}
-
-static PyObject * p_hdf_set_symlink (PyObject *self, PyObject *args)
-{
- HDFObject *ho = (HDFObject *)self;
- PyObject *rv;
- char *src;
- char *dest;
- NEOERR *err;
-
- if (!PyArg_ParseTuple(args, "ss:setSymLink(src, dest)", &src, &dest))
- return NULL;
-
- err = hdf_set_symlink (ho->data, src, dest);
- if (err) return p_neo_error(err);
-
- rv = Py_None;
- Py_INCREF(rv);
- return rv;
-}
-
-static PyObject * p_hdf_search_path (PyObject *self, PyObject *args)
-{
- HDFObject *ho = (HDFObject *)self;
- PyObject *rv;
- char *path;
- char full[_POSIX_PATH_MAX];
- NEOERR *err;
-
- if (!PyArg_ParseTuple(args, "s:searchPath(path)", &path))
- return NULL;
-
- err = hdf_search_path (ho->data, path, full);
- if (err) return p_neo_error(err);
-
- rv = PyString_FromString(full);
- return rv;
-}
-
-static PyMethodDef HDFMethods[] =
-{
- {"getIntValue", p_hdf_get_int_value, METH_VARARGS, NULL},
- {"getValue", p_hdf_get_value, METH_VARARGS, NULL},
- {"getObj", p_hdf_get_obj, METH_VARARGS, NULL},
- {"getChild", p_hdf_get_child, METH_VARARGS, NULL},
- {"getAttrs", p_hdf_get_attr, METH_VARARGS, NULL},
- {"child", p_hdf_obj_child, METH_VARARGS, NULL},
- {"next", p_hdf_obj_next, METH_VARARGS, NULL},
- {"name", p_hdf_obj_name, METH_VARARGS, NULL},
- {"value", p_hdf_obj_value, METH_VARARGS, NULL},
- {"top", p_hdf_obj_top, METH_VARARGS, NULL},
- {"attrs", p_hdf_obj_attr, METH_VARARGS, NULL},
- {"setValue", p_hdf_set_value, METH_VARARGS, NULL},
- {"setAttr", p_hdf_set_attr, METH_VARARGS, NULL},
- {"readFile", p_hdf_read_file, METH_VARARGS, NULL},
- {"writeFile", p_hdf_write_file, METH_VARARGS, NULL},
- {"writeFileAtomic", p_hdf_write_file_atomic, METH_VARARGS, NULL},
- {"readString", p_hdf_read_string, METH_VARARGS, NULL},
- {"writeString", p_hdf_write_string, METH_VARARGS, NULL},
- {"removeTree", p_hdf_remove_tree, METH_VARARGS, NULL},
- {"dump", p_hdf_dump, METH_VARARGS, NULL},
- {"copy", p_hdf_copy, METH_VARARGS, NULL},
- {"setSymLink", p_hdf_set_symlink, METH_VARARGS, NULL},
- {"searchPath", p_hdf_search_path, METH_VARARGS, NULL},
- {NULL, NULL}
-};
-
-static PyObject * p_escape (PyObject *self, PyObject *args)
-{
- PyObject *rv;
- char *s;
- char *escape;
- char *esc_char;
- int buflen;
- char *ret = NULL;
- NEOERR *err;
-
- if (!PyArg_ParseTuple(args, "s#ss:escape(str, char, escape)", &s, &buflen, &esc_char, &escape))
- return NULL;
-
- err = neos_escape(s, buflen, esc_char[0], escape, &ret);
- if (err) return p_neo_error(err);
-
- rv = Py_BuildValue("s", ret);
- free(ret);
- return rv;
-}
-
-static PyObject * p_unescape (PyObject *self, PyObject *args)
-{
- PyObject *rv;
- char *s;
- char *copy;
- char *esc_char;
- int buflen;
-
- if (!PyArg_ParseTuple(args, "s#s:unescape(str, char)", &s, &buflen, &esc_char))
- return NULL;
-
- copy = strdup(s);
- if (copy == NULL) return PyErr_NoMemory();
- neos_unescape(copy, buflen, esc_char[0]);
-
- rv = Py_BuildValue("s", copy);
- free(copy);
- return rv;
-}
-
-/* This returns the expanded version in the standard python time tuple
- * */
-static PyObject * p_time_expand (PyObject *self, PyObject *args)
-{
- PyObject *rv;
- int tt;
- struct tm ttm;
- char *tz;
-
- if (!PyArg_ParseTuple(args, "is:time_expand(time_t, timezone string)", &tt, &tz))
- return NULL;
-
- neo_time_expand(tt, tz, &ttm);
-
- rv = Py_BuildValue("(i,i,i,i,i,i,i,i,i)", ttm.tm_year + 1900, ttm.tm_mon + 1,
- ttm.tm_mday, ttm.tm_hour, ttm.tm_min, ttm.tm_sec, ttm.tm_wday, 0, ttm.tm_isdst);
- return rv;
-}
-
-static PyObject * p_time_compact (PyObject *self, PyObject *args)
-{
- PyObject *rv;
- int tt;
- struct tm ttm;
- int junk;
- char *tz;
-
- memset(&ttm, 0, sizeof(struct tm));
-
- if (!PyArg_ParseTuple(args, "(i,i,i,i,i,i,i,i,i)s:time_compact(time tuple, timezone string)", &ttm.tm_year, &ttm.tm_mon, &ttm.tm_mday, &ttm.tm_hour, &ttm.tm_min, &ttm.tm_sec, &ttm.tm_wday, &junk, &ttm.tm_isdst, &tz))
- return NULL;
-
- /* fix up difference between ttm and python tup */
- ttm.tm_year -= 1900;
- ttm.tm_mon -= 1;
-
- tt = neo_time_compact (&ttm, tz);
-
- rv = Py_BuildValue("i", tt);
- return rv;
-}
-
-static PyMethodDef UtilMethods[] =
-{
- {"HDF", p_hdf_init, METH_VARARGS, NULL},
- {"escape", p_escape, METH_VARARGS, NULL},
- {"unescape", p_unescape, METH_VARARGS, NULL},
- {"time_expand", p_time_expand, METH_VARARGS, NULL},
- {"time_compact", p_time_compact, METH_VARARGS, NULL},
- {NULL, NULL}
-};
-
-PyObject *p_hdf_value_get_attr (HDFObject *ho, char *name)
-{
- return Py_FindMethod(HDFMethods, (PyObject *)ho, name);
-}
-
-DL_EXPORT(void) initneo_util(void)
-{
- PyObject *m, *d;
-
- HDFObjectType.ob_type = &PyType_Type;
-
- m = Py_InitModule("neo_util", UtilMethods);
- d = PyModule_GetDict(m);
- NeoError = PyErr_NewException("neo_util.Error", NULL, NULL);
- NeoParseError = PyErr_NewException("neo_util.ParseError", NULL, NULL);
- PyDict_SetItemString(d, "Error", NeoError);
- PyDict_SetItemString(d, "ParseError", NeoParseError);
-}
diff --git a/python/p_neo_util.h b/python/p_neo_util.h
deleted file mode 100644
index 2bbafe6..0000000
--- a/python/p_neo_util.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#ifndef __P_NEO_UTIL_H_
-#define __P_NEO_UTIL_H_ 1
-
-#include "util/neo_misc.h"
-#include "util/neo_hdf.h"
-
-#ifndef DL_EXPORT
-#define DL_EXPORT(x) x
-#endif
-
-__BEGIN_DECLS
-
-/* external HDF object interface. */
-
-#define P_HDF_TO_OBJECT_NUM 0
-#define P_HDF_TO_OBJECT_RETURN PyObject *
-#define P_HDF_TO_OBJECT_PROTO (HDF *data, int dealloc)
-
-#define P_OBJECT_TO_HDF_NUM 1
-#define P_OBJECT_TO_HDF_RETURN HDF *
-#define P_OBJECT_TO_HDF_PROTO (PyObject *ho)
-
-#define P_NEO_ERROR_NUM 2
-#define P_NEO_ERROR_RETURN PyObject *
-#define P_NEO_ERROR_PROTO (NEOERR *err)
-
-/* external CS object interface */
-#define P_CS_TO_OBJECT_NUM 3
-#define P_CS_TO_OBJECT_RETURN PyObject *
-#define P_CS_TO_OBJECT_PROTO (CSPARSE *data)
-
-#define P_NEO_CGI_POINTERS 4
-
-#ifdef NEO_CGI_MODULE
-P_HDF_TO_OBJECT_RETURN p_hdf_to_object P_HDF_TO_OBJECT_PROTO;
-P_OBJECT_TO_HDF_RETURN p_object_to_hdf P_OBJECT_TO_HDF_PROTO;
-P_NEO_ERROR_RETURN p_neo_error P_NEO_ERROR_PROTO;
-P_CS_TO_OBJECT_RETURN p_cs_to_object P_CS_TO_OBJECT_PROTO;
-
-/* other functions */
-
-void initneo_util(void);
-void initneo_cs(void);
-
-#else
-static void **NEO_PYTHON_API;
-
-#define p_hdf_to_object \
- (*(P_HDF_TO_OBJECT_RETURN (*)P_HDF_TO_OBJECT_PROTO) NEO_PYTHON_API[P_HDF_TO_OBJECT_NUM])
-
-#define p_object_to_hdf \
- (*(P_OBJECT_TO_HDF_RETURN (*)P_OBJECT_TO_HDF_PROTO) NEO_PYTHON_API[P_OBJECT_TO_HDF_NUM])
-
-#define p_neo_error \
- (*(P_NEO_ERROR_RETURN (*)P_NEO_ERROR_PROTO) NEO_PYTHON_API[P_NEO_ERROR_NUM])
-
-#define p_cs_to_object \
- (*(P_CS_TO_OBJECT_RETURN (*)P_CS_TO_OBJECT_PROTO) NEO_PYTHON_API[P_CS_TO_OBJECT_NUM])
-
-#define import_neo_cgi() \
-{ \
- PyObject *module = PyImport_ImportModule("neo_cgi"); \
- if (module != NULL) { \
- PyObject *module_dict = PyModule_GetDict(module); \
- PyObject *c_api_object = PyDict_GetItemString(module_dict, "_C_API"); \
- PyObject *c_api_num_o = PyDict_GetItemString(module_dict, "_C_API_NUM"); \
- if (PyInt_AsLong(c_api_num_o) < P_NEO_CGI_POINTERS) { \
- PyErr_Format(PyExc_ImportError, "neo_cgi module doesn't match header compiled against, use of this module may cause a core dump: %ld < %ld", PyInt_AsLong(c_api_num_o), (long) P_NEO_CGI_POINTERS); \
- } \
- if (PyCObject_Check(c_api_object)) { \
- NEO_PYTHON_API = (void **)PyCObject_AsVoidPtr(c_api_object); \
- } \
- } \
-}
-
-#endif
-
-__END_DECLS
-
-#endif /* __P_NEO_UTIL_H_ */
diff --git a/python/setup.py b/python/setup.py
deleted file mode 100644
index b8960e9..0000000
--- a/python/setup.py
+++ /dev/null
@@ -1,131 +0,0 @@
-
-import os, string, re, sys
-
-# Check to see if the Egg system is installed (ie, setuptools)
-# See http://peak.telecommunity.com/DevCenter/PythonEggs
-USE_EGGS=1
-try:
- from setuptools import setup
-except ImportError:
- from distutils.core import setup
- USE_EGGS=0
-
-from distutils.core import Extension
-from distutils import sysconfig
-
-VERSION = "0.10.5"
-INC_DIRS = ["../"]
-LIBRARIES = ["neo_cgi", "neo_cs", "neo_utl"]
-LIB_DIRS = ["../libs"]
-CC = "gcc"
-LDSHARED = "gcc -shared"
-
-## ARGGH!! It looks like you can only specify a single item on the
-## command-line or in the setup.cfg file for options which take multiple
-## lists... and it overrides what is defined here. So I have to do all
-## the work of the configure file AGAIN here. At least its in python,
-## which is easier...
-## Actually, forget that, I'm just going to load and parse the rules.mk
-## file and build what I need
-
-if not os.path.exists("../rules.mk"):
- raise "You need to run configure first to generate the rules.mk file!"
-
-make_vars = { 'NEOTONIC_ROOT' : '..' }
-rules = open("../rules.mk").read()
-for line in string.split(rules, "\n"):
- parts = string.split(line, '=', 1)
- if len(parts) != 2: continue
- var, val = parts
- var = string.strip(var)
- make_vars[var] = val
- if var == "CFLAGS":
- matches = re.findall("-I(\S+)", val)
- inserted = []
- for inc_path in matches:
- # inc_path = match.group(1)
- if inc_path not in INC_DIRS:
- inserted.append(inc_path)
- sys.stderr.write("adding inc_path %s\n" % inc_path)
- INC_DIRS = inserted + INC_DIRS
- elif var == "LIBS":
- matches = re.findall("-l(\S+)", val)
- inserted = []
- for lib in matches:
- # lib = match.group(1)
- if lib not in LIBRARIES:
- inserted.append(lib)
- sys.stderr.write("adding lib %s\n" % lib)
- LIBRARIES = inserted + LIBRARIES
- elif var == "LDFLAGS":
- matches = re.findall("-L(\S+)", val)
- inserted = []
- for lib_path in matches:
- # lib_path = match.group(1)
- if lib_path not in LIB_DIRS:
- inserted.append(lib_path)
- sys.stderr.write("adding lib_path %s\n" % lib_path)
- LIB_DIRS = inserted + LIB_DIRS
- elif var == "CC":
- CC = val
- elif var == "LDSHARED":
- LDSHARED = val
-
-
-def expand_var(var, vars):
- def replace_var(m, variables=vars):
- var = m.group(1)
- if var[:2] == "$(" and var[-1] == ")":
- var = variables.get(var[2:-1], "")
- return var
- while 1:
- new_var = re.sub('(\$\([^\)]*\))', replace_var, var)
- if new_var == var: break
- var = new_var
- return var.strip()
-
-def expand_vars(vlist, vars):
- nlist = []
- for val in vlist:
- val = expand_var(val, vars)
- if val: nlist.append(val)
- return nlist
-
-INC_DIRS = expand_vars(INC_DIRS, make_vars)
-LIB_DIRS = expand_vars(LIB_DIRS, make_vars)
-LIBRARIES = expand_vars(LIBRARIES, make_vars)
-
-CC = os.environ.get('CC', expand_var(CC, make_vars))
-LDSHARED = os.environ.get('LDSHARED', expand_var(CC, make_vars))
-
-# HACK! The setup/Makefile may not have the hermetic/cross-compiler entries
-# for the compiler that we need, so override them here!
-given_cc = sysconfig.get_config_var('CC')
-if given_cc != CC and given_cc[0] != '/':
- sys.stderr.write("Overriding setup's CC from %s to %s\n" % (given_cc, CC))
- try:
- sysconfig._config_vars['CC'] = CC
- sysconfig._config_vars['LDSHARED'] = LDSHARED
- except AttributeError:
- pass
-
-setup_args = {
- 'name': "clearsilver",
- 'version': VERSION,
- 'description': "Python ClearSilver Wrapper",
- 'author': "Brandon Long",
- 'author_email': "blong@fiction.net",
- 'url': "http://www.clearsilver.net/",
- 'ext_modules': [Extension(
- name="neo_cgi",
- sources=["neo_cgi.c", "neo_cs.c", "neo_util.c"],
- include_dirs=INC_DIRS,
- library_dirs=LIB_DIRS,
- libraries=LIBRARIES,
- )]
- }
-
-if USE_EGGS:
- setup_args['zip_safe'] = 0
-
-apply(setup, [], setup_args)
diff --git a/python/static.py b/python/static.py
deleted file mode 100755
index 866bf43..0000000
--- a/python/static.py
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/env python
-
-import sys, os, traceback, string
-import neo_cgi
-
-def log (s):
- sys.stderr.write("CGI: %s\n" % s)
-
-def exceptionString():
- import StringIO
-
- ## get the traceback message
- sfp = StringIO.StringIO()
- traceback.print_exc(file=sfp)
- exception = sfp.getvalue()
- sfp.close()
-
- return exception
-
-def main (argv, environ):
- # log ("starting")
- cgi = neo_cgi.CGI("")
-
- try:
- hdf_file = cgi.hdf.getValue("CGI.PathTranslated", "")
- if hdf_file == "":
- cgi.error ("No PATH_TRANSLATED var")
- return
-
- x = string.rfind (hdf_file, '/')
- if x != -1:
- cgi.hdf.setValue ("hdf.loadpaths.0", hdf_file[:x])
-
- cgi.hdf.readFile(hdf_file)
- content = cgi.hdf.getValue("Content", "")
- if content == "":
- cgi.error ("No Content var specified in HDF file %s" % hdf_file)
- return
-
- cgi.display(content)
-
- except neo_cgi.CGIFinished:
- return
- except Exception, Reason:
- log ("Python Exception: %s" % (str(repr(Reason))))
- s = neo_cgi.text2html("Python Exception: %s" % exceptionString())
- cgi.error (s)
-
-if __name__ == "__main__":
- main (sys.argv, os.environ)
diff --git a/python/upload.py b/python/upload.py
deleted file mode 100755
index 5aacba0..0000000
--- a/python/upload.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/env python
-
-import sys, os, traceback, string
-import neo_cgi
-
-def log (s):
- sys.stderr.write("CGI: %s\n" % s)
-
-def exceptionString():
- import StringIO
-
- ## get the traceback message
- sfp = StringIO.StringIO()
- traceback.print_exc(file=sfp)
- exception = sfp.getvalue()
- sfp.close()
-
- return exception
-
-def main (argv, environ):
- # log ("starting")
- cgi = neo_cgi.CGI("")
-
- try:
- fp = cgi.filehandle("file")
- print "Content-Type: text/plain\r\n\r\n"
- data = fp.read()
- print data
-
- f = open("/tmp/file", "w")
- f.write(data)
-
- except neo_cgi.CGIFinished:
- return
- except Exception, Reason:
- log ("Python Exception: %s" % (str(repr(Reason))))
- s = neo_cgi.text2html("Python Exception: %s" % exceptionString())
- cgi.error (s)
-
-if __name__ == "__main__":
- main (sys.argv, os.environ)
diff --git a/ruby/Makefile b/ruby/Makefile
deleted file mode 100644
index a8a82bf..0000000
--- a/ruby/Makefile
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-ifeq ($(NEOTONIC_ROOT),)
-NEOTONIC_ROOT = ..
-endif
-
-include $(NEOTONIC_ROOT)/rules.mk
-
-all: config.save ext/hdf/hdf.so testrb
-
-config.save: install.rb
- $(RUBY) install.rb config -- --with-hdf-include=../../.. --with-hdf-lib=../../../libs --make-prog=$(MAKE)
-
-ext/hdf/Makefile:
- $(RUBY) install.rb config -- --with-hdf-include=../../.. --with-hdf-lib=../../../libs --make-prog=$(MAKE)
-
-ext/hdf/hdf.so: config.save
- $(RUBY) install.rb setup
-
-gold: ext/hdf/hdf.so
- $(RUBY) -Ilib -Iext/hdf test/hdftest.rb > hdftest.gold;
- @echo "Generated gold files"
-
-testrb: ext/hdf/hdf.so
- @echo "Running ruby test"
- @failed=0; \
- rm -f hdftest.out; \
- $(RUBY) -Ilib -Iext/hdf test/hdftest.rb > hdftest.out; \
- diff --brief hdftest.out hdftest.gold > /dev/null 2>&1; \
- return_code=$$?; \
- if [ $$return_code -ne 0 ]; then \
- diff hdftest.out hdftest.gold > hdftest.err; \
- echo "Failed Ruby Test: hdftest.rb"; \
- echo " See hdftest.out and hdftest.err"; \
- failed=1; \
- fi; \
- if [ $$failed -eq 1 ]; then \
- exit 1; \
- fi;
- @echo "Passed ruby test"
-
-
-install: all
- $(RUBY) install.rb install
-
-clean:
- $(RM) ext/hdf/*.o ext/hdf/*.so
-
-distclean:
- $(RM) Makefile.depends config.save ext/hdf/hdf.so
- $(RM) ext/hdf/Makefile ext/hdf/mkmf.log ext/hdf/*.o
diff --git a/ruby/ext/hdf/MANIFEST b/ruby/ext/hdf/MANIFEST
deleted file mode 100644
index 9fce9c7..0000000
--- a/ruby/ext/hdf/MANIFEST
+++ /dev/null
@@ -1,4 +0,0 @@
-MANIFEST
-extconf.rb
-neo_cs.c
-neo_util.c
diff --git a/ruby/ext/hdf/extconf.rb b/ruby/ext/hdf/extconf.rb
deleted file mode 100644
index d6beaa9..0000000
--- a/ruby/ext/hdf/extconf.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'mkmf'
-
-# dir_config("hdf","../../..","../../../libs")
-dir_config("hdf")
-
-have_library("z", "deflate")
-
-if have_header("ClearSilver.h") && have_library("neo_utl","hdf_init") && have_library("neo_cs","cs_init") && have_library("neo_cgi","cgi_register_strfuncs")
- create_makefile("hdf")
-end
diff --git a/ruby/ext/hdf/neo_cs.c b/ruby/ext/hdf/neo_cs.c
deleted file mode 100644
index 802544d..0000000
--- a/ruby/ext/hdf/neo_cs.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#include <ruby.h>
-#include "ClearSilver.h"
-#include "neo_ruby.h"
-
-static VALUE cCs;
-extern VALUE mNeotonic;
-extern VALUE eHdfError;
-
-VALUE r_neo_error(NEOERR *err);
-
-#define Srb_raise(val) rb_raise(eHdfError, "%s/%d %s",__FILE__,__LINE__,RSTRING(val)->ptr)
-
-static void c_free (CSPARSE *csd) {
- if (csd) {
- cs_destroy (&csd);
- }
-}
-
-static VALUE c_init (VALUE self) {
- return self;
-}
-
-VALUE c_new (VALUE class, VALUE oHdf) {
- CSPARSE *cs = NULL;
- NEOERR *err;
- t_hdfh *hdfh;
- VALUE r_cs;
-
- Data_Get_Struct(oHdf, t_hdfh, hdfh);
-
- if (hdfh == NULL) rb_raise(eHdfError, "must include an Hdf object");
-
- err = cs_init (&cs, hdfh->hdf);
- if (err) Srb_raise(r_neo_error(err));
- err = cgi_register_strfuncs(cs);
- if (err) Srb_raise(r_neo_error(err));
-
- r_cs = Data_Wrap_Struct(class, 0, c_free, cs);
- rb_obj_call_init(r_cs, 0, NULL);
- return r_cs;
-}
-
-static VALUE c_parse_file (VALUE self, VALUE oPath) {
- CSPARSE *cs = NULL;
- NEOERR *err;
- char *path;
-
- Data_Get_Struct(self, CSPARSE, cs);
- path = STR2CSTR(oPath);
-
- err = cs_parse_file (cs, path);
- if (err) Srb_raise(r_neo_error(err));
-
- return self;
-}
-
-static VALUE c_parse_str (VALUE self, VALUE oString)
-{
- CSPARSE *cs = NULL;
- NEOERR *err;
- char *s, *ms;
- long l;
-
- Data_Get_Struct(self, CSPARSE, cs);
- s = rb_str2cstr(oString, &l);
-
- /* This should be changed to use memory from the gc */
- ms = strdup(s);
- if (ms == NULL) rb_raise(rb_eNoMemError, "out of memory");
-
- err = cs_parse_string (cs, ms, (size_t)l);
-
- if (err) Srb_raise(r_neo_error(err));
-
- return self;
-}
-
-static NEOERR *render_cb (void *ctx, char *buf)
-{
- STRING *str= (STRING *)ctx;
-
- return nerr_pass(string_append(str, buf));
-}
-
-static VALUE c_render (VALUE self)
-{
- CSPARSE *cs = NULL;
- NEOERR *err;
- STRING str;
- VALUE rv;
-
- Data_Get_Struct(self, CSPARSE, cs);
-
- string_init(&str);
- err = cs_render (cs, &str, render_cb);
- if (err) Srb_raise(r_neo_error(err));
-
- rv = rb_str_new2(str.buf);
- string_clear (&str);
- return rv;
-}
-
-void Init_cs() {
- cCs = rb_define_class_under(mNeotonic, "Cs", rb_cObject);
- rb_define_singleton_method(cCs, "new", c_new, 1);
-
- rb_define_method(cCs, "initialize", c_init, 0);
- rb_define_method(cCs, "parse_file", c_parse_file, 1);
- rb_define_method(cCs, "parse_string", c_parse_str, 1);
- rb_define_method(cCs, "render", c_render, 0);
-}
diff --git a/ruby/ext/hdf/neo_ruby.h b/ruby/ext/hdf/neo_ruby.h
deleted file mode 100644
index cc895be..0000000
--- a/ruby/ext/hdf/neo_ruby.h
+++ /dev/null
@@ -1,11 +0,0 @@
-
-#ifndef __NEO_RUBY_H_
-#define __NEO_RUBY_H_
-
-typedef struct s_hdfh {
- HDF *hdf;
- struct s_hdfh *parent;
- VALUE top;
-} t_hdfh;
-
-#endif
diff --git a/ruby/ext/hdf/neo_util.c b/ruby/ext/hdf/neo_util.c
deleted file mode 100644
index 665c580..0000000
--- a/ruby/ext/hdf/neo_util.c
+++ /dev/null
@@ -1,630 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#include <ruby.h>
-#include <version.h>
-#include "ClearSilver.h"
-#include "neo_ruby.h"
-
-VALUE mNeotonic;
-static VALUE cHdf;
-VALUE eHdfError;
-static ID id_to_s;
-
-#define Srb_raise(val) rb_raise(eHdfError, "%s/%d %s",__FILE__,__LINE__,RSTRING(val)->ptr)
-
-VALUE r_neo_error (NEOERR *err)
-{
- STRING str;
- VALUE errstr;
-
- string_init (&str);
- nerr_error_string (err, &str);
- errstr = rb_str_new2(str.buf);
- /*
- if (nerr_match(err, NERR_PARSE)) {
- }
- else {
- }
- */
- string_clear (&str);
- return errstr;
-}
-
-static void h_free2(t_hdfh *hdfh) {
-#ifdef DEBUG
- fprintf(stderr,"freeing hdf 0x%x\n",hdfh);
-#endif
- hdf_destroy(&(hdfh->hdf));
- free(hdfh);
-}
-static void h_free(t_hdfh *hdfh) {
-#ifdef DEBUG
- fprintf(stderr,"freeing hdf holder 0x%x of 0x%x\n",hdfh,hdfh->parent);
-#endif
- free(hdfh);
-}
-static void h_mark(t_hdfh *hdfh) {
- /* Only mark the array if this is the top node, only the original node should
- set up the marker.
- */
-#ifdef DEBUG
- fprintf(stderr,"marking 0x%x\n",hdfh);
-#endif
- if ( ! NIL_P(hdfh->top) )
- rb_gc_mark(hdfh->top);
- else
- fprintf(stderr,"mark top 0x%x\n",hdfh);
-}
-
-static VALUE h_init (VALUE self)
-{
- return self;
-}
-
-VALUE h_new(VALUE class)
-{
- t_hdfh *hdfh;
- NEOERR *err;
- VALUE obj;
-
- obj=Data_Make_Struct(class,t_hdfh,0,h_free2,hdfh);
- err = hdf_init (&(hdfh->hdf));
- if (err) Srb_raise(r_neo_error(err));
-#ifdef DEBUG
- fprintf(stderr,"allocated 0x%x\n",(void *)hdfh);
-#endif
- hdfh->top=Qnil;
- rb_obj_call_init(obj, 0, NULL);
- return obj;
-}
-
-static VALUE h_get_attr (VALUE self, VALUE oName)
-{
- t_hdfh *hdfh;
- char *name;
- HDF_ATTR *attr;
- VALUE k,v;
- VALUE rv;
-
- Data_Get_Struct(self, t_hdfh, hdfh);
- name = STR2CSTR(oName);
-
- rv = rb_hash_new();
-
- attr = hdf_get_attr(hdfh->hdf, name);
- while ( attr != NULL ) {
- k=rb_str_new2(attr->key);
- v=rb_str_new2(attr->value);
- rb_hash_aset(rv, k, v);
- attr = attr->next;
- }
- return rv;
-}
-
-static VALUE h_set_attr(VALUE self, VALUE oName, VALUE oKey, VALUE oValue)
-{
- t_hdfh *hdfh;
- char *name, *key, *value;
- NEOERR *err;
-
- Data_Get_Struct(self, t_hdfh, hdfh);
-
- name = STR2CSTR(oName);
- key = STR2CSTR(oKey);
- if ( NIL_P(oValue) )
- value = NULL;
- else
- value = STR2CSTR(oValue);
-
- err = hdf_set_attr(hdfh->hdf, name, key, value);
- if (err) Srb_raise(r_neo_error(err));
-
- return self;
-}
-
-static VALUE h_set_value (VALUE self, VALUE oName, VALUE oValue)
-{
- t_hdfh *hdfh;
- char *name, *value;
- NEOERR *err;
-
- Data_Get_Struct(self, t_hdfh, hdfh);
-
- if ( TYPE(oName) == T_STRING )
- name=STR2CSTR(oName);
- else
- name=STR2CSTR(rb_funcall(oName,id_to_s,0));
-
- if ( TYPE(oValue) == T_STRING )
- value=STR2CSTR(oValue);
- else
- value=STR2CSTR(rb_funcall(oValue,id_to_s,0));
-
- err = hdf_set_value (hdfh->hdf, name, value);
-
- if (err) Srb_raise(r_neo_error(err));
-
- return self;
-}
-
-static VALUE h_get_int_value (VALUE self, VALUE oName, VALUE oDefault)
-{
- t_hdfh *hdfh;
- char *name;
- int r, d = 0;
- VALUE rv;
-
- Data_Get_Struct(self, t_hdfh, hdfh);
-
- name=STR2CSTR(oName);
- d=NUM2INT(oDefault);
-
- r = hdf_get_int_value (hdfh->hdf, name, d);
- rv = INT2NUM(r);
- return rv;
-}
-
-static VALUE h_get_value (VALUE self, VALUE oName, VALUE oDefault)
-{
- t_hdfh *hdfh;
- char *name;
- char *r, *d = NULL;
- VALUE rv;
-
- Data_Get_Struct(self, t_hdfh, hdfh);
- name=STR2CSTR(oName);
- d=STR2CSTR(oDefault);
-
- r = hdf_get_value (hdfh->hdf, name, d);
- rv = rb_str_new2(r);
- return rv;
-}
-
-static VALUE h_get_child (VALUE self, VALUE oName)
-{
- t_hdfh *hdfh,*hdfh_new;
- HDF *r;
- VALUE rv;
- char *name;
-
- Data_Get_Struct(self, t_hdfh, hdfh);
- name=STR2CSTR(oName);
-
- r = hdf_get_child (hdfh->hdf, name);
- if (r == NULL) {
- return Qnil;
- }
- rv=Data_Make_Struct(cHdf,t_hdfh,h_mark,h_free,hdfh_new);
- hdfh_new->top=self;
- hdfh_new->hdf=r;
- hdfh_new->parent=hdfh;
-
- return rv;
-}
-
-static VALUE h_get_obj (VALUE self, VALUE oName)
-{
- t_hdfh *hdfh,*hdfh_new;
- HDF *r;
- VALUE rv;
- char *name;
-
- Data_Get_Struct(self, t_hdfh, hdfh);
- name=STR2CSTR(oName);
-
- r = hdf_get_obj (hdfh->hdf, name);
- if (r == NULL) {
- return Qnil;
- }
-
- rv=Data_Make_Struct(cHdf,t_hdfh,h_mark,h_free,hdfh_new);
- hdfh_new->top=self;
- hdfh_new->hdf=r;
- hdfh_new->parent=hdfh;
-
- return rv;
-}
-
-static VALUE h_get_node (VALUE self, VALUE oName)
-{
- t_hdfh *hdfh,*hdfh_new;
- HDF *r;
- VALUE rv;
- char *name;
- NEOERR *err;
-
- Data_Get_Struct(self, t_hdfh, hdfh);
- name=STR2CSTR(oName);
-
- err = hdf_get_node (hdfh->hdf, name, &r);
- if (err)
- Srb_raise(r_neo_error(err));
-
- rv=Data_Make_Struct(cHdf,t_hdfh,h_mark,h_free,hdfh_new);
- hdfh_new->top=self;
- hdfh_new->hdf=r;
- hdfh_new->parent=hdfh;
-
- return rv;
-}
-
-
-static VALUE h_obj_child (VALUE self)
-{
- t_hdfh *hdfh,*hdfh_new;
- HDF *r = NULL;
- VALUE rv;
-
- Data_Get_Struct(self, t_hdfh, hdfh);
-
- r = hdf_obj_child (hdfh->hdf);
- if (r == NULL) {
- return Qnil;
- }
-
- rv=Data_Make_Struct(cHdf,t_hdfh,h_mark,h_free,hdfh_new);
- hdfh_new->top=self;
- hdfh_new->hdf=r;
- hdfh_new->parent=hdfh;
-
- return rv;
-}
-
-static VALUE h_obj_next (VALUE self)
-{
- t_hdfh *hdfh,*hdfh_new;
- HDF *r = NULL;
- VALUE rv;
-
- Data_Get_Struct(self, t_hdfh, hdfh);
-
- r = hdf_obj_next (hdfh->hdf);
- if (r == NULL) {
- return Qnil;
- }
-
- rv=Data_Make_Struct(cHdf,t_hdfh,h_mark,h_free,hdfh_new);
- hdfh_new->top=self;
- hdfh_new->hdf=r;
- hdfh_new->parent=hdfh;
-
- return rv;
-}
-
-static VALUE h_obj_top (VALUE self)
-{
- t_hdfh *hdfh,*hdfh_new;
- HDF *r = NULL;
- VALUE rv;
-
- Data_Get_Struct(self, t_hdfh, hdfh);
-
- r = hdf_obj_top (hdfh->hdf);
- if (r == NULL) {
- return Qnil;
- }
-
- rv=Data_Make_Struct(cHdf,t_hdfh,h_mark,h_free,hdfh_new);
- hdfh_new->top=self;
- hdfh_new->hdf=r;
- hdfh_new->parent=hdfh;
-
- return rv;
-}
-
-static VALUE h_obj_name (VALUE self)
-{
- t_hdfh *hdfh;
- VALUE rv;
- char *r;
-
- Data_Get_Struct(self, t_hdfh, hdfh);
-
- r = hdf_obj_name (hdfh->hdf);
- if (r == NULL) {
- return Qnil;
- }
-
- rv = rb_str_new2(r);
- return rv;
-}
-
-static VALUE h_obj_attr (VALUE self)
-{
- t_hdfh *hdfh;
- HDF_ATTR *attr;
- VALUE k,v;
- VALUE rv;
-
- Data_Get_Struct(self, t_hdfh, hdfh);
- rv = rb_hash_new();
-
- attr = hdf_obj_attr(hdfh->hdf);
- while ( attr != NULL ) {
- k=rb_str_new2(attr->key);
- v=rb_str_new2(attr->value);
- rb_hash_aset(rv, k, v);
- attr = attr->next;
- }
- return rv;
-}
-
-
-static VALUE h_obj_value (VALUE self)
-{
- t_hdfh *hdfh;
- VALUE rv;
- char *r;
-
- Data_Get_Struct(self, t_hdfh, hdfh);
-
- r = hdf_obj_value (hdfh->hdf);
- if (r == NULL) {
- return Qnil;
- }
-
- rv = rb_str_new2(r);
- return rv;
-}
-
-static VALUE h_read_file (VALUE self, VALUE oPath)
-{
- t_hdfh *hdfh;
- char *path;
- NEOERR *err;
-
- Data_Get_Struct(self, t_hdfh, hdfh);
-
- path=STR2CSTR(oPath);
-
- err = hdf_read_file (hdfh->hdf, path);
- if (err) Srb_raise(r_neo_error(err));
-
- return self;
-}
-
-static VALUE h_write_file (VALUE self, VALUE oPath)
-{
- t_hdfh *hdfh;
- char *path;
- NEOERR *err;
-
- Data_Get_Struct(self, t_hdfh, hdfh);
-
- path=STR2CSTR(oPath);
-
- err = hdf_write_file (hdfh->hdf, path);
-
- if (err) Srb_raise(r_neo_error(err));
-
- return self;
-}
-
-static VALUE h_write_file_atomic (VALUE self, VALUE oPath)
-{
- t_hdfh *hdfh;
- char *path;
- NEOERR *err;
-
- Data_Get_Struct(self, t_hdfh, hdfh);
-
- path=STR2CSTR(oPath);
-
- err = hdf_write_file_atomic (hdfh->hdf, path);
- if (err) Srb_raise(r_neo_error(err));
-
- return self;
-}
-
-static VALUE h_remove_tree (VALUE self, VALUE oName)
-{
- t_hdfh *hdfh;
- char *name;
- NEOERR *err;
-
- Data_Get_Struct(self, t_hdfh, hdfh);
- name = STR2CSTR(oName);
-
- err = hdf_remove_tree (hdfh->hdf, name);
- if (err) Srb_raise(r_neo_error(err));
-
- return self;
-}
-
-static VALUE h_dump (VALUE self)
-{
- t_hdfh *hdfh;
- VALUE rv;
- NEOERR *err;
- STRING str;
-
- string_init (&str);
-
- Data_Get_Struct(self, t_hdfh, hdfh);
-
- err = hdf_dump_str (hdfh->hdf, NULL, 0, &str);
- if (err) Srb_raise(r_neo_error(err));
-
- if (str.len==0)
- return Qnil;
-
- rv = rb_str_new2(str.buf);
- string_clear (&str);
- return rv;
-}
-
-static VALUE h_write_string (VALUE self)
-{
- t_hdfh *hdfh;
- VALUE rv;
- NEOERR *err;
- char *s = NULL;
-
- Data_Get_Struct(self, t_hdfh, hdfh);
-
- err = hdf_write_string (hdfh->hdf, &s);
-
- if (err) Srb_raise(r_neo_error(err));
-
- rv = rb_str_new2(s);
- if (s) free(s);
- return rv;
-}
-
-static VALUE h_read_string (VALUE self, VALUE oString, VALUE oIgnore)
-{
- t_hdfh *hdfh;
- NEOERR *err;
- char *s = NULL;
- int ignore = 0;
-
- Data_Get_Struct(self, t_hdfh, hdfh);
-
- s = STR2CSTR(oString);
- ignore = NUM2INT(oIgnore);
-
- err = hdf_read_string_ignore (hdfh->hdf, s, ignore);
-
- if (err) Srb_raise(r_neo_error(err));
-
- return self;
-}
-
-static VALUE h_copy (VALUE self, VALUE oName, VALUE oHdfSrc)
-{
- t_hdfh *hdfh, *hdfh_src;
- char *name;
- NEOERR *err;
-
- Data_Get_Struct(self, t_hdfh, hdfh);
- Data_Get_Struct(oHdfSrc, t_hdfh, hdfh_src);
-
- name = STR2CSTR(oName);
-
- if (hdfh_src == NULL) rb_raise(eHdfError, "second argument must be an Hdf object");
-
- err = hdf_copy (hdfh->hdf, name, hdfh_src->hdf);
- if (err) Srb_raise(r_neo_error(err));
-
- return self;
-}
-
-static VALUE h_set_symlink (VALUE self, VALUE oSrc, VALUE oDest)
-{
- t_hdfh *hdfh;
- char *src;
- char *dest;
- NEOERR *err;
-
- Data_Get_Struct(self, t_hdfh, hdfh);
- src = STR2CSTR(oSrc);
- dest = STR2CSTR(oDest);
-
- err = hdf_set_symlink (hdfh->hdf, src, dest);
- if (err) Srb_raise(r_neo_error(err));
-
- return self;
-}
-
-static VALUE h_escape (VALUE self, VALUE oString, VALUE oEsc_char, VALUE oEsc)
-{
- VALUE rv;
- char *s;
- char *escape;
- char *esc_char;
- long buflen;
- char *ret = NULL;
- NEOERR *err;
-
- s = rb_str2cstr(oString,&buflen);
- esc_char = STR2CSTR(oEsc_char);
- escape = STR2CSTR(oEsc);
-
- err = neos_escape((UINT8*)s, buflen, esc_char[0], escape, &ret);
-
- if (err) Srb_raise(r_neo_error(err));
-
- rv = rb_str_new2(ret);
- free(ret);
- return rv;
-}
-
-static VALUE h_unescape (VALUE self, VALUE oString, VALUE oEsc_char)
-{
- VALUE rv;
- char *s;
- char *copy;
- char *esc_char;
- long buflen;
-
- s = rb_str2cstr(oString,&buflen);
- esc_char = STR2CSTR(oEsc_char);
-
- /* This should be changed to use memory from the gc */
- copy = strdup(s);
- if (copy == NULL) rb_raise(rb_eNoMemError, "out of memory");
-
- neos_unescape((UINT8*)copy, buflen, esc_char[0]);
-
- rv = rb_str_new2(copy);
- free(copy);
- return rv;
-}
-
-void Init_cs();
-
-void Init_hdf() {
-
- id_to_s=rb_intern("to_s");
-
- mNeotonic = rb_define_module("Neo");
- cHdf = rb_define_class_under(mNeotonic, "Hdf", rb_cObject);
-
- rb_define_singleton_method(cHdf, "new", h_new, 0);
- rb_define_method(cHdf, "initialize", h_init, 0);
- rb_define_method(cHdf, "get_attr", h_get_attr, 1);
- rb_define_method(cHdf, "set_attr", h_set_attr, 3);
- rb_define_method(cHdf, "set_value", h_set_value, 2);
- rb_define_method(cHdf, "put", h_set_value, 2);
- rb_define_method(cHdf, "get_int_value", h_get_int_value, 2);
- rb_define_method(cHdf, "get_value", h_get_value, 2);
- rb_define_method(cHdf, "get_child", h_get_child, 1);
- rb_define_method(cHdf, "get_obj", h_get_obj, 1);
- rb_define_method(cHdf, "get_node", h_get_node, 1);
- rb_define_method(cHdf, "obj_child", h_obj_child, 0);
- rb_define_method(cHdf, "obj_next", h_obj_next, 0);
- rb_define_method(cHdf, "obj_top", h_obj_top, 0);
- rb_define_method(cHdf, "obj_name", h_obj_name, 0);
- rb_define_method(cHdf, "obj_attr", h_obj_attr, 0);
- rb_define_method(cHdf, "obj_value", h_obj_value, 0);
- rb_define_method(cHdf, "read_file", h_read_file, 1);
- rb_define_method(cHdf, "write_file", h_write_file, 1);
- rb_define_method(cHdf, "write_file_atomic", h_write_file_atomic, 1);
- rb_define_method(cHdf, "remove_tree", h_remove_tree, 1);
- rb_define_method(cHdf, "dump", h_dump, 0);
- rb_define_method(cHdf, "write_string", h_write_string, 0);
- rb_define_method(cHdf, "read_string", h_read_string, 2);
- rb_define_method(cHdf, "copy", h_copy, 2);
- rb_define_method(cHdf, "set_symlink", h_set_symlink, 2);
-
- rb_define_singleton_method(cHdf, "escape", h_escape, 3);
- rb_define_singleton_method(cHdf, "unescape", h_unescape, 3);
-
- eHdfError = rb_define_class_under(mNeotonic, "HdfError",
-#if RUBY_VERSION_MINOR >= 6
- rb_eStandardError);
-#else
- rb_eException);
-#endif
-
- Init_cs();
-}
diff --git a/ruby/hdftest.gold b/ruby/hdftest.gold
deleted file mode 100644
index fcd26d9..0000000
--- a/ruby/hdftest.gold
+++ /dev/null
@@ -1,27 +0,0 @@
-1 = farming
-2 = sewing
-3 = bowling
-party.1 [Drool="True"] = baloons
-party.2 [Pink] = noise makers
-party.3 << EOM
-telling long
-stories
-EOM
-arf.1 = farming
-arf.2 = sewing
-arf.3 = bowling
-arf.party.1 [Drool="True"] = baloons
-arf.party.2 [Pink] = noise makers
-arf.party.3 << EOM
-telling long
-stories
-EOM
-party.2 attr (Pink=1)
-This is a funny test. farming.
-
-baloons
-
-noise makers
-
-telling long
-stories
diff --git a/ruby/install.rb b/ruby/install.rb
deleted file mode 100644
index a464850..0000000
--- a/ruby/install.rb
+++ /dev/null
@@ -1,1015 +0,0 @@
-#
-# This file is automatically generated. DO NOT MODIFY!
-#
-# install.rb
-#
-# Copyright (c) 2000-2002 Minero Aoki <aamine@loveruby.net>
-#
-# This program is free software.
-# You can distribute/modify this program under the terms of
-# the GNU Lesser General Public License version 2.
-#
-
-### begin compat.rb
-
-unless Enumerable.instance_methods.include? 'inject' then
-module Enumerable
- def inject( result )
- each do |i|
- result = yield(result, i)
- end
- result
- end
-end
-end
-
-def File.read_all( fname )
- File.open(fname, 'rb') {|f| return f.read }
-end
-
-def File.write( fname, str )
- File.open(fname, 'wb') {|f| f.write str }
-end
-
-### end compat.rb
-### begin config.rb
-
-if i = ARGV.index(/\A--rbconfig=/) then
- file = $'
- ARGV.delete_at(i)
- require file
-else
- require 'rbconfig'
-end
-
-
-class ConfigTable
-
- c = ::Config::CONFIG
-
- rubypath = c['bindir'] + '/' + c['ruby_install_name']
-
- major = c['MAJOR'].to_i
- minor = c['MINOR'].to_i
- teeny = c['TEENY'].to_i
- version = "#{major}.#{minor}"
-
- # ruby ver. >= 1.4.4?
- newpath_p = ((major >= 2) or
- ((major == 1) and
- ((minor >= 5) or
- ((minor == 4) and (teeny >= 4)))))
-
- re = Regexp.new('\A' + Regexp.quote(c['prefix']))
- subprefix = lambda {|path|
- re === path and path.sub(re, '$prefix')
- }
-
- if c['rubylibdir'] then
- # 1.6.3 < V
- stdruby = subprefix.call(c['rubylibdir'])
- siteruby = subprefix.call(c['sitedir'])
- versite = subprefix.call(c['sitelibdir'])
- sodir = subprefix.call(c['sitearchdir'])
- elsif newpath_p then
- # 1.4.4 <= V <= 1.6.3
- stdruby = "$prefix/lib/ruby/#{version}"
- siteruby = subprefix.call(c['sitedir'])
- versite = siteruby + '/' + version
- sodir = "$site-ruby/#{c['arch']}"
- else
- # V < 1.4.4
- stdruby = "$prefix/lib/ruby/#{version}"
- siteruby = "$prefix/lib/ruby/#{version}/site_ruby"
- versite = siteruby
- sodir = "$site-ruby/#{c['arch']}"
- end
-
- DESCRIPTER = [
- [ 'prefix', [ c['prefix'],
- 'path',
- 'path prefix of target environment' ] ],
- [ 'std-ruby', [ stdruby,
- 'path',
- 'the directory for standard ruby libraries' ] ],
- [ 'site-ruby-common', [ siteruby,
- 'path',
- 'the directory for version-independent non-standard ruby libraries' ] ],
- [ 'site-ruby', [ versite,
- 'path',
- 'the directory for non-standard ruby libraries' ] ],
- [ 'bin-dir', [ '$prefix/bin',
- 'path',
- 'the directory for commands' ] ],
- [ 'rb-dir', [ '$site-ruby',
- 'path',
- 'the directory for ruby scripts' ] ],
- [ 'so-dir', [ sodir,
- 'path',
- 'the directory for ruby extentions' ] ],
- [ 'data-dir', [ '$prefix/share',
- 'path',
- 'the directory for shared data' ] ],
- [ 'ruby-path', [ rubypath,
- 'path',
- 'path to set to #! line' ] ],
- [ 'ruby-prog', [ rubypath,
- 'name',
- 'the ruby program using for installation' ] ],
- [ 'make-prog', [ 'make',
- 'name',
- 'the make program to compile ruby extentions' ] ],
- [ 'without-ext', [ 'no',
- 'yes/no',
- 'does not compile/install ruby extentions' ] ]
- ]
-
- SAVE_FILE = 'config.save'
-
- def ConfigTable.each_name( &block )
- keys().each( &block )
- end
-
- def ConfigTable.keys
- DESCRIPTER.collect {|k,*dummy| k }
- end
-
- def ConfigTable.each_definition( &block )
- DESCRIPTER.each( &block )
- end
-
- def ConfigTable.get_entry( name )
- name, ent = DESCRIPTER.assoc(name)
- ent
- end
-
- def ConfigTable.get_entry!( name )
- get_entry(name) or raise ArgumentError, "no such config: #{name}"
- end
-
- def ConfigTable.add_entry( name, vals )
- ConfigTable::DESCRIPTER.push [name,vals]
- end
-
- def ConfigTable.remove_entry( name )
- get_entry name or raise ArgumentError, "no such config: #{name}"
- DESCRIPTER.delete_if {|n,arr| n == name }
- end
-
- def ConfigTable.config_key?( name )
- get_entry(name) ? true : false
- end
-
- def ConfigTable.bool_config?( name )
- ent = get_entry(name) or return false
- ent[1] == 'yes/no'
- end
-
- def ConfigTable.value_config?( name )
- ent = get_entry(name) or return false
- ent[1] != 'yes/no'
- end
-
- def ConfigTable.path_config?( name )
- ent = get_entry(name) or return false
- ent[1] == 'path'
- end
-
-
- class << self
-
- alias newobj new
-
- def new
- c = newobj()
- c.__send__ :init
- c
- end
-
- def load
- c = newobj()
- File.file? SAVE_FILE or
- raise InstallError, "#{File.basename $0} config first"
- File.foreach( SAVE_FILE ) do |line|
- k, v = line.split( '=', 2 )
- c.instance_eval {
- @table[k] = v.strip
- }
- end
- c
- end
-
- end
-
- def initialize
- @table = {}
- end
-
- def init
- DESCRIPTER.each do |k, (default, vname, desc, default2)|
- @table[k] = default
- end
- end
- private :init
-
- def save
- File.open( SAVE_FILE, 'w' ) {|f|
- @table.each do |k, v|
- f.printf "%s=%s\n", k, v if v
- end
- }
- end
-
- def []=( k, v )
- ConfigTable.config_key? k or raise InstallError, "unknown config option #{k}"
- if ConfigTable.path_config? k then
- @table[k] = (v[0,1] != '$') ? File.expand_path(v) : v
- else
- @table[k] = v
- end
- end
-
- def []( key )
- @table[key] or return nil
- @table[key].gsub( %r<\$([^/]+)> ) { self[$1] }
- end
-
- def set_raw( key, val )
- @table[key] = val
- end
-
- def get_raw( key )
- @table[key]
- end
-
-end
-
-
-class MetaConfigEnvironment
-
- def self.eval_file( file )
- return unless File.file? file
- new.instance_eval File.read_all(file), file, 1
- end
-
- private
-
- def config_names
- ConfigTable.keys
- end
-
- def config?( name )
- ConfigTable.config_key? name
- end
-
- def bool_config?( name )
- ConfigTable.bool_config? name
- end
-
- def value_config?( name )
- ConfigTable.value_config? name
- end
-
- def path_config?( name )
- ConfigTable.path_config? name
- end
-
- def add_config( name, argname, default, desc )
- ConfigTable.add_entry name,[default,argname,desc]
- end
-
- def add_path_config( name, default, desc )
- add_config name, 'path', default, desc
- end
-
- def add_bool_config( name, default, desc )
- add_config name, 'yes/no', default ? 'yes' : 'no', desc
- end
-
- def set_config_default( name, default )
- if bool_config? name then
- ConfigTable.get_entry!(name)[0] = default ? 'yes' : 'no'
- else
- ConfigTable.get_entry!(name)[0] = default
- end
- end
-
- def remove_config( name )
- ent = ConfigTable.get_entry(name)
- ConfigTable.remove_entry name
- ent
- end
-
-end
-
-### end config.rb
-### begin fileop.rb
-
-module FileOperations
-
- def mkdir_p( dname, prefix = nil )
- dname = prefix + dname if prefix
- $stderr.puts "mkdir -p #{dname}" if verbose?
- return if no_harm?
-
- # does not check '/'... it's too abnormal case
- dirs = dname.split(%r_(?=/)_)
- if /\A[a-z]:\z/i === dirs[0] then
- disk = dirs.shift
- dirs[0] = disk + dirs[0]
- end
- dirs.each_index do |idx|
- path = dirs[0..idx].join('')
- Dir.mkdir path unless dir? path
- end
- end
-
- def rm_f( fname )
- $stderr.puts "rm -f #{fname}" if verbose?
- return if no_harm?
-
- if File.exist? fname or File.symlink? fname then
- File.chmod 0777, fname
- File.unlink fname
- end
- end
-
- def rm_rf( dn )
- $stderr.puts "rm -rf #{dn}" if verbose?
- return if no_harm?
-
- Dir.chdir dn
- Dir.foreach('.') do |fn|
- next if fn == '.'
- next if fn == '..'
- if dir? fn then
- verbose_off {
- rm_rf fn
- }
- else
- verbose_off {
- rm_f fn
- }
- end
- end
- Dir.chdir '..'
- Dir.rmdir dn
- end
-
- def mv( src, dest )
- rm_f dest
- begin
- File.link src, dest
- rescue
- File.write dest, File.read_all(src)
- File.chmod File.stat(src).mode, dest
- end
- rm_f src
- end
-
- def install( from, dest, mode, prefix = nil )
- $stderr.puts "install #{from} #{dest}" if verbose?
- return if no_harm?
-
- realdest = prefix + dest if prefix
- if dir? realdest then
- realdest += '/' + File.basename(from)
- end
- str = File.read_all(from)
- if diff? str, realdest then
- verbose_off {
- rm_f realdest if File.exist? realdest
- }
- File.write realdest, str
- File.chmod mode, realdest
-
- File.open( objdir + '/InstalledFiles', 'a' ) {|f| f.puts realdest }
- end
- end
-
- def diff?( orig, targ )
- return true unless File.exist? targ
- orig != File.read_all(targ)
- end
-
- def command( str )
- $stderr.puts str if verbose?
- system str or raise RuntimeError, "'system #{str}' failed"
- end
-
- def ruby( str )
- command config('ruby-prog') + ' ' + str
- end
-
- def dir?( dname )
- # for corrupted windows stat()
- File.directory?( (dname[-1,1] == '/') ? dname : dname + '/' )
- end
-
- def all_files( dname )
- Dir.open( dname ) {|d|
- return d.find_all {|n| File.file? "#{dname}/#{n}" }
- }
- end
-
- def all_dirs( dname )
- Dir.open( dname ) {|d|
- return d.find_all {|n| dir? "#{dname}/#{n}" } - %w(. ..)
- }
- end
-
-end
-
-### end fileop.rb
-### begin base.rb
-
-class InstallError < StandardError; end
-
-
-class Installer
-
- Version = '3.1.2'
- Copyright = 'Copyright (c) 2000-2002 Minero Aoki'
-
-
- @toplevel = nil
-
- def self.declear_toplevel_installer( inst )
- @toplevel and
- raise ArgumentError, 'more than one toplevel installer decleared'
- @toplevel = inst
- end
-
- def self.toplevel_installer
- @toplevel
- end
-
-
- FILETYPES = %w( bin lib ext data )
-
- include FileOperations
-
- def initialize( config, opt, srcroot, objroot )
- @config = config
- @options = opt
- @srcdir = File.expand_path(srcroot)
- @objdir = File.expand_path(objroot)
- @currdir = '.'
- end
-
- def inspect
- "#<#{type} #{__id__}>"
- end
-
- #
- # configs/options
- #
-
- def get_config( key )
- @config[key]
- end
-
- alias config get_config
-
- def set_config( key, val )
- @config[key] = val
- end
-
- def no_harm?
- @options['no-harm']
- end
-
- def verbose?
- @options['verbose']
- end
-
- def verbose_off
- save, @options['verbose'] = @options['verbose'], false
- yield
- @options['verbose'] = save
- end
-
- #
- # srcdir/objdir
- #
-
- attr_reader :srcdir
- alias srcdir_root srcdir
- alias package_root srcdir
-
- def curr_srcdir
- "#{@srcdir}/#{@currdir}"
- end
-
- attr_reader :objdir
- alias objdir_root objdir
-
- def curr_objdir
- "#{@objdir}/#{@currdir}"
- end
-
- def srcfile( path )
- curr_srcdir + '/' + path
- end
-
- def srcexist?( path )
- File.exist? srcfile(path)
- end
-
- def srcdirectory?( path )
- dir? srcfile(path)
- end
-
- def srcfile?( path )
- File.file? srcfile(path)
- end
-
- def srcentries( path = '.' )
- Dir.open( curr_srcdir + '/' + path ) {|d|
- return d.to_a - %w(. ..) - hookfilenames
- }
- end
-
- def srcfiles( path = '.' )
- srcentries(path).find_all {|fname|
- File.file? File.join(curr_srcdir, path, fname)
- }
- end
-
- def srcdirectories( path = '.' )
- srcentries(path).find_all {|fname|
- dir? File.join(curr_srcdir, path, fname)
- }
- end
-
- def dive_into( rel )
- return unless dir? "#{@srcdir}/#{rel}"
-
- dir = File.basename(rel)
- Dir.mkdir dir unless dir? dir
- save = Dir.pwd
- Dir.chdir dir
- $stderr.puts '---> ' + rel if verbose?
- @currdir = rel
- yield
- Dir.chdir save
- $stderr.puts '<--- ' + rel if verbose?
- @currdir = File.dirname(rel)
- end
-
- #
- # config
- #
-
- def exec_config
- exec_task_traverse 'config'
- end
-
- def config_dir_bin( rel )
- end
-
- def config_dir_lib( rel )
- end
-
- def config_dir_ext( rel )
- extconf if extdir? curr_srcdir
- end
-
- def extconf
- opt = @options['config-opt'].join(' ')
- command "#{config('ruby-prog')} #{curr_srcdir}/extconf.rb #{opt}"
- end
-
- def config_dir_data( rel )
- end
-
- #
- # setup
- #
-
- def exec_setup
- exec_task_traverse 'setup'
- end
-
- def setup_dir_bin( relpath )
- all_files( curr_srcdir ).each do |fname|
- add_rubypath "#{curr_srcdir}/#{fname}"
- end
- end
-
- SHEBANG_RE = /\A\#!\s*\S*ruby\S*/
-
- def add_rubypath( path )
- $stderr.puts %Q<set #! line to "\#!#{config('ruby-path')}" for #{path} ...> if verbose?
- return if no_harm?
-
- tmpfile = File.basename(path) + '.tmp'
- begin
- File.open( path ) {|r|
- File.open( tmpfile, 'w' ) {|w|
- first = r.gets
- return unless SHEBANG_RE === first # reject '/usr/bin/env ruby'
-
- w.print first.sub( SHEBANG_RE, '#!' + config('ruby-path') )
- w.write r.read
- } }
- mv tmpfile, File.basename(path)
- ensure
- rm_f tmpfile if File.exist? tmpfile
- end
- end
-
- def setup_dir_lib( relpath )
- end
-
- def setup_dir_ext( relpath )
- if extdir? curr_srcdir then
- make
- end
- end
-
- def make
- command config('make-prog')
- end
-
- def setup_dir_data( relpath )
- end
-
- #
- # install
- #
-
- def exec_install
- exec_task_traverse 'install'
- end
-
- def install_dir_bin( rel )
- install_files targfiles, config('bin-dir') + '/' + rel, 0755
- end
-
- def install_dir_lib( rel )
- install_files targfiles, config('rb-dir') + '/' + rel, 0644
- end
-
- def install_dir_ext( rel )
- if extdir? curr_srcdir then
- install_dir_ext_main File.dirname(rel)
- end
- end
-
- def install_dir_ext_main( rel )
- install_files allext('.'), config('so-dir') + '/' + rel, 0555
- end
-
- def install_dir_data( rel )
- install_files targfiles, config('data-dir') + '/' + rel, 0644
- end
-
- def install_files( list, dest, mode )
- mkdir_p dest, @options['install-prefix']
- list.each do |fname|
- install fname, dest, mode, @options['install-prefix']
- end
- end
-
- def targfiles
- (targfilenames() - hookfilenames()).collect {|fname|
- File.exist?(fname) ? fname : File.join(curr_srcdir(), fname)
- }
- end
-
- def targfilenames
- [ curr_srcdir(), '.' ].inject([]) {|ret, dir|
- ret | all_files(dir)
- }
- end
-
- def hookfilenames
- %w( pre-%s post-%s pre-%s.rb post-%s.rb ).collect {|fmt|
- %w( config setup install clean ).collect {|t| sprintf fmt, t }
- }.flatten
- end
-
- def allext( dir )
- _allext(dir) or raise InstallError,
- "no extention exists: Have you done 'ruby #{$0} setup' ?"
- end
-
- DLEXT = /\.#{ ::Config::CONFIG['DLEXT'] }\z/
-
- def _allext( dir )
- Dir.open( dir ) {|d|
- return d.find_all {|fname| DLEXT === fname }
- }
- end
-
- #
- # clean
- #
-
- def exec_clean
- exec_task_traverse 'clean'
- rm_f 'config.save'
- rm_f 'InstalledFiles'
- end
-
- def clean_dir_bin( rel )
- end
-
- def clean_dir_lib( rel )
- end
-
- def clean_dir_ext( rel )
- clean
- end
-
- def clean
- command config('make-prog') + ' clean' if File.file? 'Makefile'
- end
-
- def clean_dir_data( rel )
- end
-
- #
- # lib
- #
-
- def exec_task_traverse( task )
- run_hook 'pre-' + task
- FILETYPES.each do |type|
- if config('without-ext') == 'yes' and type == 'ext' then
- $stderr.puts 'skipping ext/* by user option' if verbose?
- next
- end
- traverse task, type, task + '_dir_' + type
- end
- run_hook 'post-' + task
- end
-
- def traverse( task, rel, mid )
- dive_into( rel ) {
- run_hook 'pre-' + task
- __send__ mid, rel.sub( %r_\A.*?(?:/|\z)_, '' )
- all_dirs( curr_srcdir ).each do |d|
- traverse task, rel + '/' + d, mid
- end
- run_hook 'post-' + task
- }
- end
-
- def run_hook( name )
- try_run_hook curr_srcdir + '/' + name or
- try_run_hook curr_srcdir + '/' + name + '.rb'
- end
-
- def try_run_hook( fname )
- return false unless File.file? fname
-
- env = self.dup
- begin
- env.instance_eval File.read_all(fname), fname, 1
- rescue
- raise InstallError, "hook #{fname} failed:\n" + $!.message
- end
- true
- end
-
- def extdir?( dir )
- File.exist? dir + '/MANIFEST'
- end
-
-end
-
-### end base.rb
-### begin toplevel.rb
-
-class ToplevelInstaller < Installer
-
- TASKS = [
- [ 'config', 'saves your configurations' ],
- [ 'show', 'shows current configuration' ],
- [ 'setup', 'compiles extention or else' ],
- [ 'install', 'installs files' ],
- [ 'clean', "does `make clean' for each extention" ]
- ]
-
-
- def initialize( root )
- super nil, {'verbose' => true}, root, '.'
- Installer.declear_toplevel_installer self
- end
-
-
- def execute
- run_metaconfigs
-
- case task = parsearg_global()
- when 'config'
- @config = ConfigTable.new
- else
- @config = ConfigTable.load
- end
- parsearg_TASK task
-
- exectask task
- end
-
-
- def run_metaconfigs
- MetaConfigEnvironment.eval_file "#{srcdir_root}/#{metaconfig}"
- end
-
- def metaconfig
- 'metaconfig'
- end
-
-
- def exectask( task )
- if task == 'show' then
- exec_show
- else
- try task
- end
- end
-
- def try( task )
- $stderr.printf "#{File.basename $0}: entering %s phase...\n", task if verbose?
- begin
- __send__ 'exec_' + task
- rescue
- $stderr.printf "%s failed\n", task
- raise
- end
- $stderr.printf "#{File.basename $0}: %s done.\n", task if verbose?
- end
-
- #
- # processing arguments
- #
-
- def parsearg_global
- task_re = /\A(?:#{TASKS.collect {|i| i[0] }.join '|'})\z/
-
- while arg = ARGV.shift do
- case arg
- when /\A\w+\z/
- task_re === arg or raise InstallError, "wrong task: #{arg}"
- return arg
-
- when '-q', '--quiet'
- @options['verbose'] = false
-
- when '--verbose'
- @options['verbose'] = true
-
- when '-h', '--help'
- print_usage $stdout
- exit 0
-
- when '-v', '--version'
- puts "#{File.basename $0} version #{Version}"
- exit 0
-
- when '--copyright'
- puts Copyright
- exit 0
-
- else
- raise InstallError, "unknown global option '#{arg}'"
- end
- end
-
- raise InstallError, 'no task or global option given'
- end
-
-
- def parsearg_TASK( task )
- mid = "parsearg_#{task}"
- if respond_to? mid, true then
- __send__ mid
- else
- ARGV.empty? or
- raise InstallError, "#{task}: unknown options: #{ARGV.join ' '}"
- end
- end
-
- def parsearg_config
- re = /\A--(#{ConfigTable.keys.join '|'})(?:=(.*))?\z/
- @options['config-opt'] = []
-
- while i = ARGV.shift do
- if /\A--?\z/ === i then
- @options['config-opt'] = ARGV.dup
- break
- end
- m = re.match(i) or raise InstallError, "config: unknown option #{i}"
- name, value = m.to_a[1,2]
- if value then
- if ConfigTable.bool_config?(name) then
- /\A(y(es)?|n(o)?|t(rue)?|f(alse))\z/i === value or raise InstallError, "config: --#{name} allows only yes/no for argument"
- value = (/\Ay(es)?|\At(rue)/i === value) ? 'yes' : 'no'
- end
- else
- ConfigTable.bool_config?(name) or raise InstallError, "config: --#{name} requires argument"
- value = 'yes'
- end
- @config[name] = value
- end
- end
-
- def parsearg_install
- @options['no-harm'] = false
- @options['install-prefix'] = ''
- while a = ARGV.shift do
- case a
- when /\A--no-harm\z/
- @options['no-harm'] = true
- when /\A--prefix=(.*)\z/
- path = $1
- path = File.expand_path(path) unless path[0,1] == '/'
- @options['install-prefix'] = path
- else
- raise InstallError, "install: unknown option #{a}"
- end
- end
- end
-
-
- def print_usage( out )
- out.puts
- out.puts 'Usage:'
- out.puts " ruby #{File.basename $0} <global option>"
- out.puts " ruby #{File.basename $0} [<global options>] <task> [<task options>]"
-
- fmt = " %-20s %s\n"
- out.puts
- out.puts 'Global options:'
- out.printf fmt, '-q,--quiet', 'suppress message outputs'
- out.printf fmt, ' --verbose', 'output messages verbosely'
- out.printf fmt, '-h,--help', 'print this message'
- out.printf fmt, '-v,--version', 'print version and quit'
- out.printf fmt, '--copyright', 'print copyright and quit'
-
- out.puts
- out.puts 'Tasks:'
- TASKS.each do |name, desc|
- out.printf " %-10s %s\n", name, desc
- end
-
- out.puts
- out.puts 'Options for config:'
- ConfigTable.each_definition do |name, (default, arg, desc, default2)|
- out.printf " %-20s %s [%s]\n",
- '--'+ name + (ConfigTable.bool_config?(name) ? '' : '='+arg),
- desc,
- default2 || default
- end
- out.printf " %-20s %s [%s]\n",
- '--rbconfig=path', 'your rbconfig.rb to load', "running ruby's"
-
- out.puts
- out.puts 'Options for install:'
- out.printf " %-20s %s [%s]\n",
- '--no-harm', 'only display what to do if given', 'off'
-
- out.puts
- end
-
- #
- # config
- #
-
- def exec_config
- super
- @config.save
- end
-
- #
- # show
- #
-
- def exec_show
- ConfigTable.each_name do |k|
- v = @config.get_raw(k)
- if not v or v.empty? then
- v = '(not specified)'
- end
- printf "%-10s %s\n", k, v
- end
- end
-
-end
-
-### end toplevel.rb
-
-if $0 == __FILE__ then
- begin
- installer = ToplevelInstaller.new( File.dirname($0) )
- installer.execute
- rescue
- raise if $DEBUG
- $stderr.puts $!.message
- $stderr.puts "try 'ruby #{$0} --help' for usage"
- exit 1
- end
-end
diff --git a/ruby/lib/neo.rb b/ruby/lib/neo.rb
deleted file mode 100644
index cbdb9fb..0000000
--- a/ruby/lib/neo.rb
+++ /dev/null
@@ -1,46 +0,0 @@
-require 'hdf'
-
-module Clearsilver
-
- class Hdf < Neo::Hdf
-
- def initialize
- super
- @level=0
- @cpos=""
- @position=[]
- end
-
- attr_reader :position, :cpos
-
- def push name
- @position.push(@cpos)
- @cpos+=name+"."
-
- if block_given?
- yield
- @cpos=@position.pop
- end
- end
-
- def pop
- @cpos=@position.pop
- end
-
- def put name, value
- value = value.to_s unless value.is_a?(String)
- self.set_value(@cpos+(name.to_s),value)
- end
-
- def get name
- self.get_value(@cpos+name)
- end
-
- end
-
- class Cs < Neo::Cs
-
- end
-end
-
-
diff --git a/ruby/test/hdftest.rb b/ruby/test/hdftest.rb
deleted file mode 100644
index 10b5f94..0000000
--- a/ruby/test/hdftest.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'neo'
-
-h=Neo::Hdf.new
-h.set_value "1","farming"
-h.set_value "2","sewing"
-h.set_value "3","bowling"
-
-h.set_value "party.1","baloons"
-h.set_value "party.2","noise makers"
-h.set_value "party.3","telling long\nstories"
-
-h.set_attr "party.1", "Drool", "True"
-h.set_attr "party.2", "Pink", "1"
-
-print h.dump
-
-q=Neo::Hdf.new
-
-q.copy "arf",h
-
-print q.dump
-
-h.get_attr("party.2").each_pair do |k,v|
- print "party.2 attr (#{k}=#{v})\n"
-end
-
-
-s="This is a funny test. <?cs var:arf.1 ?>.
-<?cs each:p = arf.party ?>
-<?cs var:p ?>
-<?cs /each ?>"
-c = Neo::Cs.new q
-
-c.parse_string(s)
-
-print c.render
-
diff --git a/rules.mk.in b/rules.mk.in
deleted file mode 100644
index 2bb9ce4..0000000
--- a/rules.mk.in
+++ /dev/null
@@ -1,169 +0,0 @@
-############################################################
-#
-# rules.mk is A U T O G E N E R A T E D
-#
-# you must edit: rules.mk.in
-#
-############################################################
-
-##
-## Global Makefile Rules
-##
-## Before including this file, you must set NEOTONIC_ROOT
-##
-
-OSNAME := $(shell uname -rs | cut -f 1-2 -d "." | cut -f 1 -d "-")
-OSTYPE := $(shell uname -s)
-
-LIB_DIR = $(NEOTONIC_ROOT)/libs/
-
-## Installation Directories
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-
-DESTDIR =
-
-cs_includedir = ${includedir}/ClearSilver
-
-## NOTE: The wdb code in util will tickle a bug in SleepyCat 2.4.5,
-## which ships with various versions of Linux as part of glibc. If you
-## are going to use that code, you should compile against SleepyCat
-## 2.7.7 instead
-USE_DB2 = 1
-
-USE_ZLIB = 1
-
-@USE_MINGW32@
-
-PICFLG = -fPIC
-ifeq ($(OSTYPE),OSF1)
-PICFLG =
-endif
-ifeq ($(OSNAME),MINGW32_NT)
-PICFLG =
-endif
-
-
-## -------------- base (Linux/Neotonic) options
-
-PYTHON_INC = @PYTHON_INC@
-PYTHON_LIB = @PYTHON_LIB@
-PYTHON_SITE = @PYTHON_SITE@
-JAVA_PATH = @JAVA_PATH@
-JAVA_INCLUDE_PATH = @JAVA_INCLUDE_PATH@
-CSHARP_PATH = @CSHARP_PATH@
-
-## Programs
-@SET_MAKE@
-INSTALL = @INSTALL@
-CC = @CC@
-MKDIR = mkdir -p
-RM = rm -f
-CPP = g++
-JAVAC = $(JAVA_PATH)/bin/javac
-JAVAH = $(JAVA_PATH)/bin/javah
-JAR = $(JAVA_PATH)/bin/jar
-APXS = @APXS_PATH@
-PYTHON = @PYTHON@
-PERL = @PERL@
-RUBY = @RUBY@
-
-CPPFLAGS = -I$(NEOTONIC_ROOT) @CPPFLAGS@
-CFLAGS = @CFLAGS@ -Wall $(CPPFLAGS) $(PICFLG)
-OUTPUT_OPTION = -o $@
-LD = $(CC) -o
-LDFLAGS = -L$(LIB_DIR) @LDFLAGS@
-LDSHARED = $(CC) -shared $(PICFLG)
-CPPLDSHARED = $(CPP) -shared $(PICFLG)
-AR = @AR@ cr
-RANLIB = @RANLIB@
-DEP_LIBS = $(DLIBS:-l%=$(LIB_DIR)lib%.a)
-DBI_LIBS = -ldbi -ldl -lz
-LIBS = @LIBS@
-LS = /bin/ls
-XARGS = xargs -i%
-BUILD_WRAPPERS = @BUILD_WRAPPERS@
-EXTRA_UTL_OBJS = @EXTRA_UTL_OBJS@
-EXTRA_UTL_SRC = @EXTRA_UTL_SRC@
-
-## I don't really feel like writing a configure thing for this yet
-ifeq ($(OSNAME),SunOS)
-LDSHARED = ld -G -fPIC
-endif
-ifeq ($(OSTYPE),Darwin)
-LDSHARED = $(CC) -bundle -flat_namespace -undefined suppress $(PICFLG)
-CPPLDSHARED = $(CPP) -bundle -flat_namespace -undefined suppress $(PICFLG)
-endif
-
-## --------------win32 options
-
-## ifeq ($(OSTYPE),WindowsNT)
-## CFLAGS += -D__WINDOWS_GCC__
-## USE_DB2 = 0
-## USE_ZLIB = 0
-## # SHELL=cmd.exe
-## LS = ls
-## PYTHON_INC = -Ic:/Python22/include
-## LDSHARED= dllwrap
-## endif
-##
-## ## --------------
-##
-## ifeq ($(OSTYPE),FreeBSD)
-## XARGS = xargs -J%
-## # This should work on freebsd... but I wouldn't worry too much about it
-## USE_DB2 = 0
-## PYTHON_INC = -I/usr/local/include/python2.2
-## endif
-##
-## ifeq ($(USE_ZLIB),1)
-## LIBS += -lz
-## endif
-##
-## ifeq ($(USE_DB2),1)
-## DB2_INC = -I$(HOME)/src/db-2.7.7/dist
-## DB2_LIB = -L$(HOME)/src/db-2.7.7/dist -ldb
-## CFLAGS += $(DB2_INC)
-## endif
-
-.c.o:
- $(CC) $(CFLAGS) $(OUTPUT_OPTION) -c $<
-
-everything: depend all
-
-.PHONY: depend
-depend: Makefile.depends
-
-SOURCE_FILES := $(wildcard *.c)
-Makefile.depends: $(NEOTONIC_ROOT)/rules.mk Makefile
- @echo "*******************************************"
- @echo "** Building Dependencies "
- @echo "** OSNAME: $(OSTYPE)"
- @rm -f Makefile.depends
- @touch Makefile.depends
- @if test "x" != "x$(SOURCE_FILES)"; then \
- for II in "$(SOURCE_FILES)"; do \
- gcc -M -MG ${CFLAGS} $$II >> Makefile.depends; \
- done; \
- fi
- @echo "** (done) "
-
-DEPEND_FILE := $(shell find . -name Makefile.depends -print)
-ifneq ($(DEPEND_FILE),)
-include Makefile.depends
-endif
diff --git a/scripts/ChangeLog.py b/scripts/ChangeLog.py
deleted file mode 100755
index fc60bad..0000000
--- a/scripts/ChangeLog.py
+++ /dev/null
@@ -1,245 +0,0 @@
-#!/neo/opt/bin/python
-
-import sys, os, string, re, getopt, pwd, socket, time
-
-def warn(*args):
- t = time.time()
- log_line = "[" + time.strftime("%m/%d %T", time.localtime(t)) + "] "
- l = []
- for arg in args:
- l.append(str(arg))
- log_line = log_line + string.join(l, " ") + "\n"
- sys.stderr.write(log_line)
-
-class ChangeLog:
- def __init__ (self, module, release_from, release_to, copydir = None, cvsroot=None):
- self._module = module
- self._releaseFrom = release_from
- self._releaseTo = release_to
- self._cvsroot = cvsroot
- if cvsroot is None:
- self._cvsroot = os.environ.get("CVSROOT", None)
-
- self._copydir = copydir
- if copydir is None:
- self._copydir = os.getcwd()
- self._names = {}
-
- def changeInfo (self):
- cmd = self.cvsCmd ("-q", "rdiff", "-s -r%s -r%s %s" % (self._releaseFrom, self._releaseTo, self._module))
- warn (cmd)
- fpi = os.popen (cmd)
- data = fpi.readlines()
- r = fpi.close()
- if r is None: r = 0
- if r != 0:
- warn ("Return code from command is %d\n" % r)
- return
-
- self.oldfiles = {}
- self.newfiles = []
- self.delfiles = []
- old_re = re.compile ("File (.*) changed from revision (.*) to (.*)")
- new_re = re.compile ("File (.*) is new; current revision (.*)")
- del_re = re.compile ("File (.*) is removed;")
- for line in data:
- m = old_re.match (line)
- if m:
- file = m.group(1)
- if file[:len(self._module)+1] == "%s/" % self._module:
- file = file[len(self._module)+1:]
- self.oldfiles[file] = (m.group(2), m.group(3))
- continue
- m = new_re.match (line)
- if m:
- file = m.group(1)
- if file[:len(self._module)+1] == "%s/" % self._module:
- file = file[len(self._module)+1:]
- self.newfiles.append(file)
- continue
- m = del_re.match (line)
- if m:
- file = m.group(1)
- if file[:len(self._module)+1] == "%s/" % self._module:
- file = file[len(self._module)+1:]
- self.delfiles.append(file)
- continue
- warn ("Unknown response from changeInfo request:\n %s" % line)
-
- def parselog (self, log):
- lines = string.split (log, '\n')
- in_header = 1
- x = 0
- num = len(lines)
- revisions = {}
- revision = None
- comment = []
- info_re = re.compile ("date: ([^; ]*) ([^;]*); author: ([^;]*);")
- while (x < num):
- line = string.strip(lines[x])
- if line:
- if (x + 1 < num):
- nline = string.strip(lines[x+1])
- else:
- nline = None
- if in_header:
- (key, value) = string.split (line, ':', 1)
- if key == "Working file":
- filename = string.strip (value)
- elif key == "description":
- in_header = 0
- else:
- if (line == "----------------------------") and (nline[:9] == "revision "):
- if revision is not None:
- key = (date, author, string.join (comment, '\n'))
- try:
- revisions[key].append((filename, revision))
- except KeyError:
- revisions[key] = [(filename, revision)]
- comment = []
- elif line == "=" * 77:
- key = (date, author, string.join (comment, '\n'))
- try:
- revisions[key].append((filename, revision))
- except KeyError:
- revisions[key] = [(filename, revision)]
- in_header = 1
- revision = None
- comment = []
- elif line[:9] == "revision ":
- (rev, revision) = string.split (lines[x])
- else:
- m = info_re.match (lines[x])
- if m:
- date = m.group(1)
- author = m.group(3)
- else:
- comment.append (lines[x])
- x = x + 1
- return revisions
-
- def rcs2log (self):
- cwd = os.getcwd()
- os.chdir(self._copydir)
- files = string.join (self.oldfiles.keys(), ' ')
- cmd = 'rcs2log -v -r "-r%s:%s" %s' % (self._releaseFrom, self._releaseTo, files)
- fpi = os.popen (cmd)
- data = fpi.read()
- r = fpi.close()
- os.chdir(cwd)
- if r is None: r = 0
- if r != 0:
- warn (cmd)
- warn ("Return code from command is %d\n" % r)
- return
-
- fpo = open ("ChangeLog.%s" % self._releaseTo, 'w')
- fpo.write(data)
- fpo.close()
-
- def runCmd (self, cmd):
- cwd = os.getcwd()
- os.chdir(self._copydir)
- warn (cmd)
- fpi = os.popen (cmd)
- data = fpi.read()
- r = fpi.close()
- os.chdir(cwd)
- if r is None: r = 0
- if r != 0:
- warn ("Return code from command is %d\n" % r)
- return None
- return data
-
- def rcslog (self):
- inverted_log = {}
- if len(self.newfiles):
- cmd = self.cvsCmd ("", "log", "-N %s" % string.join(self.newfiles,' '))
- data = self.runCmd (cmd)
- if data is None: return
- revisions = self.parselog (data)
- for (key, value) in revisions.items():
- try:
- inverted_log[key] = inverted_log[key] + value
- except KeyError:
- inverted_log[key] = value
-
- filenames = string.join (self.oldfiles.keys(), ' ')
- if filenames:
- cmd = self.cvsCmd ("", "log", "-N -r%s:%s %s" % (self._releaseFrom, self._releaseTo, filenames))
- data = self.runCmd (cmd)
- if data is not None:
- revisions = self.parselog (data)
- for (key, value) in revisions.items():
- for (filename, revision) in value:
- (rev1, rev2) = self.oldfiles[filename]
- if revision != rev1:
- try:
- inverted_log[key].append((filename, revision))
- except KeyError:
- inverted_log[key] = [(filename, revision)]
-
- fpo = open ("ChangeLog.%s" % self._releaseTo, 'w')
- fpo.write ("ChangeLog from %s to %s\n" % (self._releaseFrom, self._releaseTo))
- fpo.write ("=" * 72 + "\n")
- changes = inverted_log.items()
- changes.sort()
- changes.reverse()
- last_stamp = ""
- for (key, value) in changes:
- (date, author, comment) = key
- new_stamp = "%s %s" % (date, self.fullname(author))
- if new_stamp != last_stamp:
- fpo.write ("%s\n\n" % new_stamp)
- last_stamp = new_stamp
- for (filename, revision) in value:
- fpo.write (" * %s:%s\n" % (filename, revision))
- fpo.write (" %s\n\n" % comment)
-
- fpo.close()
-
- def cvsCmd (self, cvsargs, cmd, cmdargs):
- root = ""
- if self._cvsroot is not None:
- root = "-d %s" % self._cvsroot
-
- cmd = "cvs -z3 %s %s %s %s" % (root, cvsargs, cmd, cmdargs)
- return cmd
-
- def fullname (self, author):
- try:
- return self._names[author]
- except KeyError:
- try:
- (name, passwd, uid, gid, gecos, dir, shell) = pwd.getpwnam(author)
- fullname = "%s <%s@%s>" % (gecos, name, socket.gethostname())
- except KeyError:
- fullname = author
-
- self._names[author] = fullname
- return fullname
-
-
-def usage (argv0):
- print "usage: %s [--help] module release1 release2" % argv0
- print __doc__
-
-def main (argv, stdout, environ):
- list, args = getopt.getopt(argv[1:], "", ["help"])
-
- for (field, val) in list:
- if field == "--help":
- usage (argv[0])
- return
-
- if len (args) < 3:
- usage (argv[0])
- return
-
- cl = ChangeLog (args[0], args[1], args[2])
- cl.changeInfo()
- cl.rcslog()
-
-
-if __name__ == "__main__":
- main (sys.argv, sys.stdout, os.environ)
diff --git a/scripts/commitlog.py b/scripts/commitlog.py
deleted file mode 100755
index 07c8033..0000000
--- a/scripts/commitlog.py
+++ /dev/null
@@ -1,86 +0,0 @@
-#!/usr/bin/python
-# commitlog.py
-#
-# Written July 2001 by David W. Jeske <jeske@neotonic.com>
-#
-# Released freely into the public domain.
-#
-# parse CVS commit logs and make nice submit logs...
-#
-
-import sys
-import os
-import string
-import time
-
-
-def main(argv):
- PATH = argv[1]
- module = argv[2]
-
- body = sys.stdin.read()
- body_lines = string.split(body,"\n")
-
- mode = 0
-
- mod_files = []
- add_files = []
- rem_files = []
- log_lines = []
-
- for a_line in body_lines:
- if a_line == "Modified Files:":
- mode = "modfiles"
- elif a_line == "Added Files:":
- mode = "addfiles"
- elif a_line == "Log Message:":
- mode = "loglines"
- elif a_line == "Removed Files:":
- mode = "remfiles"
- else:
- if mode == "modfiles":
- mod_files.append(string.strip(a_line))
- elif mode == "addfiles":
- add_files.append(string.strip(a_line))
- elif mode == "loglines":
- log_lines.append(a_line)
- elif mode == "remfiles":
- rem_files.append(string.strip(a_line))
-
-
- # if files don't exist, we should create them...
-
- CVS_USER = os.environ['LOGNAME']
- DATE = time.strftime( "%I:%M%p %Y/%m/%d", time.localtime(time.time()))
-
- log_summary = "%10s %16s %s\n" % (CVS_USER,DATE,string.join(log_lines," ")[:60])
-
- filename = os.path.join(PATH,"%s.summary" % module)
- os.system('co -f -q -l %s %s,v' % (filename,filename))
-
- # check to see if the log line is already there
- fps = open(filename,"a+")
- try:
- fps.seek(-len(log_summary),2)
- check_data = fps.read(len(log_summary))
- if check_data != log_summary:
- fps.write(log_summary)
- except IOError:
- # Not enough data to go back that far
- fps.write(log_summary)
-
-
- fps.close()
- os.system('ci -q -m"none" %s %s,v' % (filename,filename))
-
- log_data = "----------------\n" + "USER: %s\n" % CVS_USER + "DATE: %s\n" % DATE + body
-
- filename = os.path.join(PATH,"%s" % module)
- os.system('co -f -q -l %s %s,v' % (filename,filename))
- fp = open(filename,"a+")
- fp.write(log_data)
- fp.close()
- os.system('ci -q -m"none" %s %s,v' % (filename,filename))
-
-if __name__ == "__main__":
- main(sys.argv)
diff --git a/scripts/cs_lint.py b/scripts/cs_lint.py
deleted file mode 100755
index 293a979..0000000
--- a/scripts/cs_lint.py
+++ /dev/null
@@ -1,283 +0,0 @@
-#!/usr/bin/python
-#!/neo/opt/bin/python
-
-import sys, string, os, getopt, signal, time
-sys.path.append("../python")
-import neo_cgi, neo_util
-import cStringIO
-
-class ClearSilverChecker:
- def __init__ (self):
- self.context = ""
- self.data = ""
- self.at = 0
- self.cmd = ""
- self.tokens = []
-
- def error(self, s):
- lineno = self.lineno(self.data, self.at)
- print "-E- [%s:%d] %s" % (self.context, lineno, s)
- if self.cmd:
- print " Command is %s" % self.cmd
- if self.tokens:
- print " Tokens: %s" % repr(self.tokens)
-
- def warn(self, s):
- lineno = self.lineno(self.data, self.at)
- print "-W- [%s:%d] %s" % (self.context, lineno, s)
- if self.cmd:
- print " Command is %s" % self.cmd
- if self.tokens:
- print " Tokens: %s" % repr(self.tokens)
-
- def check_file(self, filename):
- print "Checking file %s" % filename
- self.context = filename
- try:
- self.run_neo_cgi(filename)
- except neo_util.ParseError, reason:
- print "-E- %s" % str(reason)
- self.data = open(filename, "r").read()
- self.parse()
-
- def run_neo_cgi(self, filename):
- stdin = cStringIO.StringIO("")
- stdout = cStringIO.StringIO()
- neo_cgi.cgiWrap(stdin, stdout, {})
- neo_cgi.IgnoreEmptyFormVars(1)
- ncgi = neo_cgi.CGI()
- path = os.path.dirname(filename)
- ncgi.hdf.setValue("hdf.loadpaths.path", path)
- ncgi.display(filename)
- return
-
- def lineno(self, data, i):
- return len(string.split(data[:i], '\n'))
-
- def parse(self):
- self.at = 0
- x = string.find(self.data[self.at:], '<?cs ')
- while x >= 0:
- self.at = x + self.at
- ce = string.find(self.data[self.at:], '?>')
- if ce == -1:
- self.error("Missing ?> in expression")
- else:
- ce = ce + self.at
- self.check_command(ce)
-
- # reset these class variables
- self.cmd = ""
- self.tokens = []
- self.at = self.at + 1
- x = string.find(self.data[self.at:], '<?cs ')
-
- def check_command(self, end):
- cmd = self.data[self.at+5:end]
- self.cmd = cmd
- if cmd[0] == '/':
- # handle end command
- cmd = cmd[1:]
- self.command_end(cmd)
- return
-
- pound = string.find(cmd, '#')
- colon = string.find(cmd, ':')
- bang = string.find(cmd, '!')
- if colon == -1 and bang == -1:
- if pound != -1:
- #print "Found comment: %s" % cmd
- pass
- else:
- self.command_begin(string.strip(cmd), "")
- elif pound != -1 and bang != -1 and pound < bang:
- # comment
- #print "Found comment: %s" % cmd
- pass
- elif pound != -1 and colon != -1 and pound < colon:
- # comment
- #print "Found comment: %s" % cmd
- pass
- elif bang == -1:
- arg = cmd[colon+1:]
- cmd = cmd[:colon]
- self.command_begin(cmd, arg)
- elif colon == -1:
- arg = cmd[bang+1:]
- cmd = cmd[:bang]
- self.command_begin(cmd, arg)
-
- def command_end(self, cmd):
- pass
-
- def command_begin(self, cmd, args):
- #print "%s -> %s" % (cmd, args)
- if cmd == "alt":
- self.check_expression(args)
- elif cmd == "if":
- self.check_expression(args)
- elif cmd == "elif":
- self.check_expression(args)
- elif cmd == "else":
- pass
- elif cmd == "include":
- self.check_expression(args)
- elif cmd == "linclude":
- self.check_expression(args)
- elif cmd == "name":
- self.check_expression(args)
- elif cmd == "var":
- self.check_expression(args)
- elif cmd == "evar":
- self.check_expression(args)
- elif cmd == "lvar":
- self.check_expression(args)
- elif cmd == "def":
- macro, args = self.split_macro(args)
- if macro: self.check_expression(macro, lvalue=1)
- if args:self.check_expression(args)
- elif cmd == "call":
- macro, args = self.split_macro(args)
- if macro: self.check_expression(macro, lvalue=1)
- if args:self.check_expression(args)
- elif cmd == "with":
- varname, args = self.split_equals(args)
- if varname: self.check_expression(varname, lvalue=1)
- if args: self.check_expression(args)
- elif cmd == "each":
- varname, args = self.split_equals(args)
- if varname: self.check_expression(varname, lvalue=1)
- if args: self.check_expression(args)
- elif cmd == "loop":
- varname, args = self.split_equals(args)
- if varname: self.check_expression(varname, lvalue=1)
- if args: self.check_expression(args)
- elif cmd == "set":
- varname, args = self.split_equals(args)
- if varname: self.check_expression(varname, lvalue=1)
- if args: self.check_expression(args)
- else:
- self.error("Unrecognized command %s" % cmd)
-
- def split_equals(self, args):
- x = string.find(args, '=')
- if x == -1:
- self.error("Missing equals")
- return None, None
- else:
- return args[:x], args[x+1:]
-
- def split_macro(self, args):
- b = string.find(args, '(')
- e = string.rfind(args, ')')
- if b == -1:
- self.error("Missing opening parenthesis")
- return None, None
- if e == -1:
- self.error("Missing closing parenthesis")
- return None, None
- macro_name = args[:b]
- args = args[b+1:e]
- return macro_name, args
-
- def check_expression(self, expr, lvalue=0):
- tokens = self.tokenize_expression(expr)
- #print repr(tokens)
- if len(tokens) == 0:
- self.error("Empty Expression")
-
- _OP = 1
- _VAR = 2
- _VARN = 3
- _STR = 4
- _NUM = 5
-
- _TOKEN_SEP = "\"?<>=!#-+|&,)*/%[]( \t\r\n"
-
- def tokenize_expression(self, expr):
- self.tokens = []
- while expr:
- #print "expr: '%s'" % expr
- expr = string.lstrip(expr)
- len_expr = len(expr)
- if len_expr == 0: break
- if expr[:2] in ["<=", ">=", "==", "!=", "||", "&&"]:
- self.tokens.append((ClearSilverChecker._OP, expr[:2]))
- expr = expr[2:]
- continue
- elif expr[0] in ["!", "?", "<", ">", "+", "-", "*", "/", "%", "(", ")", "[", "]", ".", ',']:
- self.tokens.append((ClearSilverChecker._OP, expr[0]))
- expr = expr[1:]
- continue
- elif expr[0] in ["#", "$"]:
- x = 1
- if expr[1] in ['+', '-']: x=2
- while len_expr > x and expr[x] not in ClearSilverChecker._TOKEN_SEP: x=x+1
- if x == 0:
- self.error("[1] Zero length token, unexpected character %s" % expr[0])
- x = 1
- else:
- token = expr[1:x]
- if expr[0] == "#":
- try:
- n = int(token)
- t_type = ClearSilverChecker._NUM
- except ValueError:
- t_type = ClearSilverChecker._VARN
- else:
- t_type = ClearSilverChecker._VAR
- self.tokens.append((t_type, token))
- expr = expr[x:]
- continue
- elif expr[0] in ['"', "'"]:
- x = string.find(expr[1:], expr[0])
- if x == -1:
- self.error("Missing end of string %s " % expr)
- break
- else:
- x = x + 1
- self.tokens.append((ClearSilverChecker._STR, expr[1:x]))
- expr = expr[x+2:]
- continue
- else:
- x = 0
- while len_expr > x and expr[x] not in ClearSilverChecker._TOKEN_SEP: x=x+1
- if x == 0:
- self.error("[2] Zero length token, unexpected character %s" % expr[0])
- x = 1
- else:
- token = expr[:x]
- try:
- n = int(token)
- t_type = ClearSilverChecker._NUM
- self.warn("This behavior changed in version 0.9: previously this was a variable name, now its a number: %s" % token)
- except ValueError:
- t_type = ClearSilverChecker._VAR
- self.tokens.append((t_type, token))
- expr = expr[x:]
- continue
- return self.tokens
-
- # For version 0.9, we changed two things, we should check for them
- # both
- # - an all numeric expression element is now considered a number and
- # not an HDF variable name
- # - we now use boolean evaluation in places that used to use either a
- # special case or a numeric evaluation
-
-def usage(argv0):
- print "%s: usage info!!" % argv0
-
-def main(argv):
- alist, args = getopt.getopt(argv[1:], "", ["help"])
-
- for (field, val) in alist:
- if field == "--help":
- usage(argv[0])
- sys.exit(-1)
-
- for file in args:
- ClearSilverChecker().check_file(file)
-
-if __name__ == "__main__":
- main(sys.argv)
diff --git a/scripts/document.py b/scripts/document.py
deleted file mode 100755
index 7571e68..0000000
--- a/scripts/document.py
+++ /dev/null
@@ -1,294 +0,0 @@
-#!/usr/bin/env python
-"""
- document.py -- Simple script to generate manpages from C header
- files. Looks for the following formatted C comments in the C header files:
-
- /*
- * Function: my_function - This is my function
- * Description: My function does the following things, in no particular
- * order: It eats, sleeps, and is merry
- * Input: arg1 - This argument is healthy
- * arg2 - This argument is wealthy
- * arg3 - This argument is wise
- * Output: arg4 - The location of the porridge
- * arg5 - The location of the spider
- * Returns: -1 on error, 0 otherwise
- */
-
-"""
-
-
-import sys, os, getopt, string, re, time
-
-QUIET = 0
-
-def usage(argv0):
- print "%s [--help]" % argv0
-
-class FuncDoc:
- def __init__ (self, name):
- self._name = name
- self._title = None
- self._desc = None
- self._args = None
- self._retr = None
- self._defn = None
- self._output = None
- self._other = ""
-
- def __repr__(self):
- out = []
- out.append("Name: %s" % self._name)
- if self._title is not None:
- out.append("Title: %s" % self._title)
- if self._desc is not None:
- out.append("Description: %s" % self._desc)
- if self._args is not None:
- out.append("Input: %s" % self._args)
- if self._output is not None:
- out.append("Output: %s" % self._output)
- if self._retr is not None:
- out.append("Returns: %s" % self._retr)
- if string.strip(self._other):
- out.append("Other: %s" % self._other)
- if self._defn is not None:
- out.append("Definition:")
- out.append(self._defn)
- return string.join(out, "\n")
-
-class CParser:
- STATE_OTHER = 0
- STATE_COMT = 1
- STATE_FUNC = 2
-
- RE_C_comment = re.compile("/\*(.*)")
- RE_C_define = re.compile("\s*#\s*define (\S+) (.*)")
- RE_C_typedef = re.compile("typedef (\S+) (.*)")
- RE_C_func_def = re.compile("[^#]*(\S+)([ \*]+)(\S+)\s*\([^\)]*\);")
- RE_C_func_def_b = re.compile("[^#]*(\S+)([ \*]+)(\S+)\s*\([^\)]*")
- RE_C_func_com = re.compile("function:\s*(\S+)(.*)", re.IGNORECASE)
- RE_C_desc_com = re.compile("description:\s*(.+)", re.IGNORECASE)
- RE_C_args_com = re.compile("(arguments|input):\s*(.+)", re.IGNORECASE)
- RE_C_retr_com = re.compile("(return|returns):\s*(.+)", re.IGNORECASE)
- RE_C_out_com = re.compile("output:\s*(.+)", re.IGNORECASE)
- RE_C_other_com = re.compile("(\S+):\s*(.+)")
- RE_C_com_cont = re.compile("[ \*]*(.+)")
-
- def __init__ (self, filename):
- self._filename = filename
- self._funcs = {}
-
- def func (self, name):
- try:
- return self._funcs[name]
- except KeyError:
- f = FuncDoc(name)
- self._funcs[name] = f
- return f
-
- def go(self):
- try:
- fp = open(self._filename)
- except IOError:
- return
- state = CParser.STATE_OTHER
- f = None
- cont = None
- while 1:
- line = fp.readline()
- if not line: break
- if state == CParser.STATE_OTHER:
- m = CParser.RE_C_comment.search (line)
- if m:
- line = m.group(1)
- state = CParser.STATE_COMT
- else:
- m = CParser.RE_C_define.match(line)
- if m: continue
- m = CParser.RE_C_typedef.search(line)
- if m: continue
- m = CParser.RE_C_func_def.match(line)
- if m:
- func_name = m.group(3)
- f = self.func(func_name)
- f._defn = line
- else:
- m = CParser.RE_C_func_def_b.match(line)
- if m:
- state = CParser.STATE_FUNC
- func_name = m.group(3)
- f = self.func(func_name)
- f._defn = line
- continue
- if state == CParser.STATE_COMT:
- if string.find(line, "*/") != -1:
- state = CParser.STATE_OTHER
- continue
- m = CParser.RE_C_func_com.search(line)
- if m:
- cont = "func"
- f = self.func(m.group(1))
- f._title = m.group(2)
- continue
- m = CParser.RE_C_desc_com.search(line)
- if m:
- cont = "desc"
- f._desc = m.group(1)
- continue
- m = CParser.RE_C_args_com.search(line)
- if m:
- cont = "args"
- f._args = m.group(2)
- continue
- m = CParser.RE_C_retr_com.search(line)
- if m:
- cont = "retr"
- f._retr = m.group(2)
- continue
- m = CParser.RE_C_out_com.search(line)
- if m:
- cont = "out"
- f._output = m.group(1)
- continue
- m = CParser.RE_C_other_com.search(line)
- if not f: continue
- if m:
- cont = "other"
- f._other = f._other + "%s: %s" % (m.group(1), m.group(2))
- continue
- m = CParser.RE_C_com_cont.search(line)
- if m:
- if cont == "func":
- f._title = f._title + '\n' + m.group(1)
- elif cont == "desc":
- f._desc = f._desc + '\n'+ m.group(1)
- elif cont == "args":
- f._args = f._args + '\n' + m.group(1)
- elif cont == "retr":
- f._retr = f._retr + '\n' + m.group(1)
- elif cont == "out":
- f._output = f._output + '\n' + m.group(1)
- elif cont == "other":
- f._other = f._other + '\n' + m.group(1)
- elif state == CParser.STATE_FUNC:
- f._defn = f._defn+line
- if string.find(line, ");") != -1:
- state = CParser.STATE_OTHER
-
- def dump(self):
- for name in self._funcs.keys():
- # print name
- print "%s\n" % self._funcs[name]
-
- def dump_manpages(self, directory, owner):
- global QUIET
- date = time.strftime("%d %B %Y", time.localtime(time.time()))
- for name, f in self._funcs.items():
- if f._title is None and f._desc is None and f._args is None and f._retr is None:
- if not QUIET:
- sys.stderr.write('-W- No info for function "%s()"\n' % name)
- continue
- if f._defn is None:
- if not QUIET:
- sys.stderr.write('-W- No defn for function "%s()"\n' % name)
- fp = open("%s/%s.3" % (directory, name), "w")
- fp.write('.TH %s 3 "%s" "%s" "%s"\n\n' % (name, date, owner, self._filename))
- fp.write('.de Ss\n.sp\n.ft CW\n.nf\n..\n')
- fp.write('.de Se\n.fi\n.ft P\n.sp\n..\n')
- fp.write('.SH NAME\n')
- if f._title is None:
- fp.write('%s\n' % f._name)
- else:
- fp.write('%s %s\n' % (f._name, f._title))
- fp.write('.SH SYNOPSIS\n')
- fp.write('.Ss\n#include <%s>\n.Se\n' % self._filename)
- if f._defn:
- fp.write('.Ss\n%s\n.Se\n' % f._defn)
- else:
- fp.write('.Ss\n%s()\n.Se\n' % f._name)
- fp.write('\n')
- if f._args:
- fp.write('.SH ARGUMENTS\n')
- fp.write('%s\n\n' % string.replace(f._args, '\n', '\n.br\n'))
- if f._desc or string.strip(f._other):
- fp.write('.SH DESCRIPTION\n')
- if f._desc: fp.write('%s\n\n' % f._desc)
- if string.strip(f._other): fp.write('%s\n\n' % f._other)
- if f._output:
- fp.write('.SH "RETURN VALUE"\n')
- fp.write('%s\n\n' % string.replace(f._output, '\n', '\n.br\n'))
- fp.write('.SH "SEE ALSO"\n')
- fp.write('.BR %s\n' % string.join(self._funcs.keys(), ' "(3), "'))
- fp.close()
-
- def dump_hdf (self, directory, owner):
- global QUIET
- sys.path.insert (0, "../python")
- sys.path.insert (0, "python")
- import neo_cgi, neo_util
- hdf = neo_util.HDF()
- date = time.strftime("%d %B %Y", time.localtime(time.time()))
- if not self._funcs.items(): return
- for name, f in self._funcs.items():
- if f._title is None and f._desc is None and f._args is None and f._retr is None:
- if not QUIET:
- sys.stderr.write('-W- No info for function "%s()"\n' % name)
- continue
- if f._defn is None:
- if not QUIET:
- sys.stderr.write('-W- No defn for function "%s()"\n' % name)
- hdf.setValue ("Code.%s" % name, name)
- obj = hdf.getObj ("Code.%s" % name)
- obj.setValue ("Name", name)
- obj.setValue ("filename", self._filename)
- if f._title: obj.setValue ("Title", f._title)
- if f._defn: obj.setValue ("Define", neo_cgi.text2html(f._defn))
- if f._args: obj.setValue ("Args", neo_cgi.text2html(f._args))
- if f._desc: obj.setValue ("Desc", neo_cgi.text2html(f._desc))
- if string.strip(f._other): obj.setValue ("Other", neo_cgi.text2html(string.strip(f._other)))
- if f._output: obj.setValue ("Output", neo_cgi.text2html(f._output))
- n = 0
- for func in self._funcs.keys():
- obj.setValue ("related.%d" % n, func)
- n = n + 1
-
- fname = self._filename
- x = string.rindex (fname, "/")
- if x != -1: fname = fname[x+1:]
- x = string.rindex (fname, '.')
- if x != -1: fname = fname[:x]
-
- hdf.writeFile ("%s/%s.hdf" % (directory, fname))
-
-def main(argv, environ):
- alist, args = getopt.getopt(argv[1:], "q", ["help", "outdir=", "owner=", "hdf"])
-
- outdir = "."
- owner = ""
- do_hdf = 0
- for (field, val) in alist:
- if field == "--help":
- usage (argv[0])
- return
- if field == "--outdir":
- outdir = val
- if field == "--owner":
- owner = val
- if field == "-q":
- global QUIET
- QUIET = 1
- if field == "--hdf":
- do_hdf = 1
-
- if args:
- for file in args:
- parser = CParser(file)
- parser.go()
- if not do_hdf:
- parser.dump_manpages(outdir, owner)
- else:
- parser.dump_hdf (outdir, owner)
-
-
-if __name__ == "__main__":
- main (sys.argv, os.environ)
diff --git a/util/Android.mk b/util/Android.mk
deleted file mode 100644
index 8ad4184..0000000
--- a/util/Android.mk
+++ /dev/null
@@ -1,31 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := docs
-LOCAL_SRC_FILES:= \
- neo_err.c \
- neo_files.c \
- neo_misc.c \
- neo_rand.c \
- ulist.c \
- neo_hdf.c \
- neo_str.c \
- neo_date.c \
- wildmat.c \
- ulocks.c \
- neo_hash.c
-
-LOCAL_C_INCLUDES := $(LOCAL_PATH)/..
-LOCAL_CFLAGS := -fPIC
-
-LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
-
-LOCAL_MODULE:= libneo_util
-
-include $(BUILD_HOST_SHARED_LIBRARY)
-
-# this forces us into 64 bit mode, even though for the non-simulator builds we
-# mostly don't do that. Java on Hardy is 64 bit, and rather than finding a 32
-# bit java build, just build this in 64 bit.
-$(LOCAL_BUILT_MODULE): HOST_GLOBAL_CFLAGS:=
-$(LOCAL_BUILT_MODULE): HOST_GLOBAL_CPPFLAGS:=
diff --git a/util/Makefile b/util/Makefile
deleted file mode 100644
index 06f2efe..0000000
--- a/util/Makefile
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-ifeq ($(NEOTONIC_ROOT),)
-NEOTONIC_ROOT = ..
-endif
-
-include $(NEOTONIC_ROOT)/rules.mk
-
-UTL_LIB = $(LIB_DIR)libneo_utl.a
-UTL_SRC = neo_err.c neo_files.c neo_misc.c neo_rand.c ulist.c neo_hdf.c \
- neo_str.c neo_date.c wildmat.c neo_hash.c $(EXTRA_UTL_SRC)
-
-UTL_OBJ = $(UTL_SRC:%.c=%.o) $(EXTRA_UTL_OBJS)
-UTL_HDR = $(UTL_SRC:%.c=%.h)
-
-TARGETS = $(UTL_LIB)
-
-all: $(TARGETS)
-
-$(UTL_LIB): $(UTL_OBJ)
- $(AR) $@ $(UTL_OBJ)
- $(RANLIB) $@
-
-install: all
- $(NEOTONIC_ROOT)/mkinstalldirs $(DESTDIR)$(cs_includedir)/util
- $(INSTALL) -m 644 $(UTL_HDR) $(DESTDIR)$(cs_includedir)/util
- $(INSTALL) -m 644 $(UTL_LIB) $(DESTDIR)$(libdir)
-
-clean:
- $(RM) *.o
-
-distclean:
- $(RM) Makefile.depends $(TARGETS) *.o
diff --git a/util/dict.c b/util/dict.c
deleted file mode 100644
index 3c56582..0000000
--- a/util/dict.c
+++ /dev/null
@@ -1,610 +0,0 @@
-/*
- *
- * Thread-safe Dictionary Using String Identifiers
- * Copyright 1998-2000 Scott Shambarger (scott@shambarger.net)
- *
- * This software is open source. Permission to use, copy, modify, and
- * distribute this software for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies. No
- * warranty of any kind is expressed or implied. Use at your own risk.
- *
- */
-
-#include "cs_config.h"
-
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <assert.h>
-
-#include "neo_misc.h"
-#include "neo_err.h"
-#include "dict.h"
-#include "skiplist.h"
-#include "ulocks.h"
-
-
-typedef struct dictValue {
-
- void *value; /* value to set/update */
- dictNewValueCB new; /* new value callback (value is NULL) */
- dictUpdateValueCB update; /* update value callback (value is NULL) */
- void *rock; /* rock to pass to callbacks */
-
-} *dictValuePtr;
-
-typedef struct dictItem {
-
- struct dictItem *next; /* pointer to next value */
- char *id; /* string id */
- void *value; /* value */
-
-} *dictItemPtr;
-
-typedef struct dictEntry {
-
- dictItemPtr first; /* first item in entry */
- BOOL deleted; /* TRUE if entry has been passed to skipDelete */
-
-} *dictEntryPtr;
-
-typedef UINT32 (*dictHashFunc)(const char *str);
-typedef int (*dictCompFunc)(const char *s1, const char *s2);
-
-struct _dictCtx {
-
- pthread_mutex_t mList; /* list update mutex */
- skipList list; /* skip list */
-
- dictHashFunc hash; /* hash function */
- dictCompFunc comp; /* id compare function */
- BOOL useCase;
-
- BOOL threaded; /* TRUE if threaded */
- dictFreeValueFunc freeValue; /* free value callback */
- void *freeRock; /* context for freeValue */
-};
-
-#undef DO_DEBUG
-
-#ifdef DO_DEBUG
-#include <sched.h>
-#define DICT_LOCK(dict) \
- do { if((dict)->threaded) { sched_yield(); \
- mLock(&(dict)->mList); } } while(0)
-#define DICT_HASH_BITS 16
-#else
-#define DICT_LOCK(dict) \
- if((dict)->threaded) mLock(&(dict)->mList)
-#define DICT_HASH_BITS 65536
-#endif
-#define DICT_UNLOCK(dict) \
- if((dict)->threaded) mUnlock(&(dict)->mList)
-
-/* entry is locked, so item may be added */
-static NEOERR *dictNewItem(dictCtx dict, dictEntryPtr entry,
- const char *id, dictValuePtr newval, dictItemPtr *item)
-{
- dictItemPtr my_item;
-
- if (item != NULL)
- *item = NULL;
-
- /* check if we can set a new value */
- if(! (newval->value || newval->new))
- return nerr_raise(NERR_ASSERT, "value or new are NULL");
-
- if(! (my_item = calloc(1, sizeof(struct dictItem))))
- return nerr_raise(NERR_NOMEM, "Unable to allocate new dictItem");
-
- if(! (my_item->id = strdup(id))) {
- free(my_item);
- return nerr_raise(NERR_NOMEM, "Unable to allocate new id for dictItem");
- }
-
- /* set new value */
- if(newval->value) {
- my_item->value = newval->value;
- }
- else {
- NEOERR *err = STATUS_OK;
-
- err = newval->new(id, newval->rock, &(my_item->value));
- if (err != STATUS_OK)
- {
- /* new item callback failed, cleanup */
- free(my_item->id);
- free(my_item);
-
- return nerr_pass(err);
- }
- }
-
- my_item->next = entry->first;
- entry->first = my_item;
- if (item != NULL)
- *item = my_item;
-
- return STATUS_OK;
-}
-
-static void dictFreeItem(dictCtx dict, dictItemPtr item) {
-
- if(dict->freeValue)
- dict->freeValue(item->value, dict->freeRock);
- free(item->id);
- free(item);
-
- return;
-}
-
-/* list locked, so safe to walk entry */
-static dictItemPtr dictFindItem(dictCtx dict, dictEntryPtr entry,
- const char *id, BOOL unlink) {
-
- dictItemPtr *prev, item;
-
- prev = &entry->first;
-
- for(item = entry->first; item; item = item->next) {
-
- if(! dict->comp(item->id, id)) {
-
- if(unlink)
- *prev = item->next;
-
- return item;
- }
-
- prev = &item->next;
- }
-
- return NULL;
-}
-
-static NEOERR *dictUpdate(dictCtx dict, dictEntryPtr entry, const char *id,
- dictValuePtr newval, void *lock) {
-
- NEOERR *err = STATUS_OK;
- dictItemPtr item = NULL;
- void *newValue;
-
- /* check for entry (maybe not found...) */
- if(! entry)
- return nerr_raise(NERR_NOT_FOUND, "Entry is NULL");
-
- /* only use entry if not deleted */
- if(! entry->deleted) {
-
- /* find item */
- if((item = dictFindItem(dict, entry, id, FALSE))) {
-
- if(newval->value) {
-
- if(dict->freeValue)
- dict->freeValue(item->value, dict->freeRock);
-
- item->value = newval->value;
- }
- else if(newval->update) {
-
- /* track error (if update fails) */
- err = newval->update(id, item->value, newval->rock);
- }
- else if((err = newval->new(id, newval->rock, &newValue)) == STATUS_OK) {
-
- if(dict->freeValue)
- dict->freeValue(item->value, dict->freeRock);
-
- item->value = newValue;
- }
- else {
- /* new item failed (don't remove old), indicate that update failed */
- item = NULL;
- }
- }
- else {
-
- /* add new item to entry */
- err = dictNewItem(dict, entry, id, newval, &item);
- }
- }
-
- /* release entry lock */
- skipRelease(dict->list, lock);
-
- return nerr_pass(err);
-}
-
-static NEOERR *dictInsert(dictCtx dict, UINT32 hash, const char *id,
- dictValuePtr newval) {
-
- dictEntryPtr entry;
- void *lock;
- NEOERR *err = STATUS_OK;
-
- /* create new item and insert entry */
- entry = calloc(1, sizeof(struct dictEntry));
- if (entry == NULL)
- return nerr_raise(NERR_NOMEM, "Unable to allocate memory for dictEntry");
-
- /* create/insert item (or cleanup) */
- err = dictNewItem(dict, entry, id, newval, NULL);
- if (err != STATUS_OK) return nerr_pass(err);
-
- /* if we insert, we're done */
- if((err = skipInsert(dict->list, hash, entry, FALSE)) == STATUS_OK)
- return STATUS_OK;
-
- /* failed to insert, cleanup */
- if(dict->freeValue && ! newval->value)
- dict->freeValue(entry->first->value, dict->freeRock);
- free(entry->first->id);
- free(entry->first);
- free(entry);
-
- /* check err */
- if (!nerr_handle(&err, NERR_DUPLICATE))
- return nerr_pass(err);
-
- /* cool, someone already inserted the entry before we got the lock */
- entry = skipSearch(dict->list, hash, &lock);
-
- /* update entry as normal (handles entry not found) */
- return nerr_pass(dictUpdate(dict, entry, id, newval, lock));
-}
-
-static UINT32 dictHash(dictCtx dict, const char *id) {
-
- UINT32 hash;
-
- hash = dict->hash(id) % DICT_HASH_BITS;
-
- /* ensure hash is valid for skiplist (modify consistently if not) */
- if(! (hash && (hash != (UINT32)-1)))
- hash = 1;
-
- return hash;
-}
-
-static NEOERR *dictModify(dictCtx dict, const char *id, dictValuePtr newval)
-{
- NEOERR *err;
- UINT32 hash;
- dictEntryPtr entry;
- void *lock = NULL;
-
- hash = dictHash(dict, id);
-
- /* find entry in list */
- entry = skipSearch(dict->list, hash, &lock);
-
- DICT_LOCK(dict);
-
- if((err = dictUpdate(dict, entry, id, newval, lock)) != STATUS_OK)
- {
- /* insert new entry */
- nerr_ignore(&err);
- err = dictInsert(dict, hash, id, newval);
- }
-
- DICT_UNLOCK(dict);
-
- return nerr_pass(err);
-}
-
-NEOERR *dictSetValue(dictCtx dict, const char *id, void *value) {
-
- struct dictValue newval;
-
- assert(value);
-
- newval.value = value;
-
- return dictModify(dict, id, &newval);
-}
-
-NEOERR *dictModifyValue(dictCtx dict, const char *id, dictNewValueCB new,
- dictUpdateValueCB update, void *rock) {
-
- struct dictValue newval;
-
- if(! (new || update))
- return FALSE;
-
- newval.value = NULL;
- newval.new = new;
- newval.update = update;
- newval.rock = rock;
-
- return dictModify(dict, id, &newval);
-}
-
-void dictReleaseLock(dictCtx dict, void *lock) {
-
- /* release entry */
- DICT_UNLOCK(dict);
-
- /* release skip entry */
- skipRelease(dict->list, lock);
-
- return;
-}
-
-void dictCleanup(dictCtx dict, dictCleanupFunc cleanup, void *rock) {
-
- dictItemPtr *prev, item, next;
- dictEntryPtr entry;
- UINT32 key = 0;
- void *lock;
-
- while((entry = skipNext(dict->list, &key, &lock))) {
-
- DICT_LOCK(dict);
-
- prev = &entry->first;
-
- for(item = entry->first; item; item = next) {
-
- next = item->next;
-
- if(cleanup(item->id, item->value, rock)) {
-
- /* remove item */
- *prev = item->next;
- dictFreeItem(dict, item);
- }
- else {
- /* update reference pointer */
- prev = &item->next;
- }
- }
-
- /* delete entry if last item removed */
- if(! entry->first) {
-
- entry->deleted = TRUE;
-
- skipDelete(dict->list, key);
- }
-
- dictReleaseLock(dict, lock);
- }
-
- return;
-}
-
-void *dictSearch(dictCtx dict, const char *id, void **plock) {
-
- dictEntryPtr entry;
- dictItemPtr item;
- UINT32 hash;
- void *lock;
- void *value;
-
- hash = dictHash(dict, id);
-
- /* find entry in list */
- if(! (entry = skipSearch(dict->list, hash, &lock)))
- return NULL;
-
- /* lock entry */
- DICT_LOCK(dict);
-
- /* find item */
- if((item = dictFindItem(dict, entry, id, FALSE))) {
-
- value = item->value;
-
- if(plock)
- *plock = lock;
- else
- dictReleaseLock(dict, lock);
-
- return value;
- }
-
- dictReleaseLock(dict, lock);
-
- return NULL;
-}
-
-void *dictNext (dictCtx dict, char **id, void **plock)
-{
- dictEntryPtr entry;
- dictItemPtr item;
- UINT32 hash;
- void *lock;
- void *value;
-
- /* Handle the first one special case */
- if (*id == NULL)
- {
- hash = 0;
- /* find entry in list */
- if(! (entry = skipNext (dict->list, &hash, &lock)))
- return NULL;
-
- /* lock entry */
- DICT_LOCK(dict);
-
- /* Take first item in list */
- item = entry->first;
-
- if (item != NULL)
- {
- value = item->value;
- *id = item->id;
-
- if(plock)
- *plock = lock;
- else
- dictReleaseLock(dict, lock);
-
- return value;
- }
-
- dictReleaseLock(dict, lock);
-
- return NULL;
- }
- else
- {
- hash = dictHash(dict, *id);
-
- /* find entry in list */
- entry = skipSearch (dict->list, hash, &lock);
-
- if (entry == NULL)
- {
- entry = skipNext (dict->list, &hash, &lock);
- /* Not found, we're at the end of the dict */
- if (entry == NULL)
- return NULL;
- }
-
- /* lock entry */
- DICT_LOCK(dict);
-
- item = dictFindItem(dict, entry, *id, FALSE);
- if (item != NULL)
- {
- if (item->next != NULL)
- {
- item = item->next;
- }
- else
- {
- /* we have to move to the next skip entry */
- entry = skipNext (dict->list, &hash, &lock);
- /* Not found, we're at the end of the dict */
- item = entry?entry->first:NULL;
-
- if(! item) {
- dictReleaseLock(dict, lock);
- return NULL;
- }
-
- }
- value = item->value;
- *id = item->id;
-
- if(plock)
- *plock = lock;
- else
- dictReleaseLock(dict, lock);
-
- return value;
- }
-
- dictReleaseLock(dict, lock);
- }
-
- return NULL;
-}
-
-BOOL dictRemove(dictCtx dict, const char *id) {
-
- dictEntryPtr entry;
- dictItemPtr item;
- UINT32 hash;
- void *lock;
-
- hash = dictHash(dict, id);
-
- /* find entry in list */
- if(! (entry = skipSearch(dict->list, hash, &lock)))
- return FALSE;
-
- /* lock entry */
- DICT_LOCK(dict);
-
- /* find/unlink/free item */
- if((item = dictFindItem(dict, entry, id, TRUE)))
- dictFreeItem(dict, item);
-
- dictReleaseLock(dict, lock);
-
- return item ? TRUE : FALSE;
-}
-
-/* called by skipList when safe to destroy entry */
-static void dictDestroyEntry(void *value, void *ctx) {
-
- dictItemPtr item, next;
- dictEntryPtr entry;
-
- entry = value;
-
- for(item = entry->first; item; item = next) {
-
- next = item->next;
- dictFreeItem(ctx, item);
- item = next;
- }
-
- free(value);
-
- return;
-}
-
-NEOERR *dictCreate(dictCtx *rdict, BOOL threaded, UINT32 root, UINT32 maxLevel,
- UINT32 flushLimit, BOOL useCase, dictFreeValueFunc freeValue, void *freeRock)
-{
- NEOERR *err;
- dictCtx dict;
-
- *rdict = NULL;
-
- do {
-
- if(! (dict = calloc(1, sizeof(struct _dictCtx))))
- return nerr_raise (NERR_NOMEM, "Unable to allocate memory for dictCtx");
-
- dict->useCase = useCase;
- dict->hash = python_string_hash;
- if(useCase) {
- dict->comp = strcmp;
- }
- else {
- /* dict->hash = uhashUpper; */
- dict->comp = strcasecmp;
- }
-
- dict->threaded = threaded;
- dict->freeValue = freeValue;
- dict->freeRock = freeRock;
-
- err = skipNewList(&(dict->list), threaded, root, maxLevel,
- flushLimit, dictDestroyEntry, dict);
- if (err != STATUS_OK) break;
-
- if (threaded)
- {
- err = mCreate(&(dict->mList));
- if (err != STATUS_OK) break;
- }
-
- *rdict = dict;
- return STATUS_OK;
-
- } while(FALSE);
-
- dictDestroy(dict);
-
- return nerr_pass(err);
-}
-
-void dictDestroy(dictCtx dict) {
-
- if(! dict)
- return;
-
- skipFreeList(dict->list);
-
- mDestroy(&dict->mList);
-
- free(dict);
-
- return;
-}
diff --git a/util/dict.h b/util/dict.h
deleted file mode 100644
index 550b26a..0000000
--- a/util/dict.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- *
- * Thread-safe Dictionary Using String Identifiers
- * Copyright 1998-2000 Scott Shambarger (scott@shambarger.net)
- *
- * This software is open source. Permission to use, copy, modify, and
- * distribute this software for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies. No
- * warranty of any kind is expressed or implied. Use at your own risk.
- *
- */
-
-
-#ifndef __DICT_H_
-#define __DICT_H_
-
-__BEGIN_DECLS
-
-typedef struct _dictCtx *dictCtx;
-typedef BOOL (*dictCleanupFunc)(char *id, void *value, void *rock);
-typedef void (*dictFreeValueFunc)(void *value, void *rock);
-
-NEOERR *dictCreate(dictCtx *dict, BOOL threaded, UINT32 root, UINT32 maxLevel,
- UINT32 flushLimit, BOOL useCase,
- dictFreeValueFunc freeValue, void *freeRock);
-/*
- * Function: dictCreate - create new dictionary.
- * Description: Returns a dictionary. If <threaded> is true, list is
- * multi-thread safe. <root>, <maxLevel>, and <flushLimit>
- * act as for skipNewList() (see skiplist.h)
- * Input: threaded - true if list should be thread-safe.
- * root - performance parameter (see above).
- * maxLevel - performance parameter (see above).
- * flushLimit - max deleted items to keep cached before
- * forcing a flush.
- * useCase - true to be case sensitive in identifiers
- * freeValue - callback when freeing a value
- * freeRock - context for freeValue callback
- * Output: None.
- * Return: New dictionary, NULL on error.
- * MT-Level: Safe.
- */
-
-void dictDestroy(dictCtx dict);
-/*
- * Function: dictDestroy - destroy dictionary.
- * Description: Release all resources used by <dict>.
- * Input: dict - dictionary to destroy
- * Output: None.
- * Return: None.
- * MT-Level: Safe for unique <dict>.
- */
-
-BOOL dictRemove(dictCtx dict, const char *id);
-/*
- * Function: dictRemove - remove item from dictionary.
- * Description: Removes item identified by <id> from <dict>.
- * Input: dict - dictionary to search in.
- * id - identifier of item to remove.
- * Output: None.
- * Return: true if item found, false if not.
- * MT-Level: Safe if <dict> thread-safe.
- */
-
-void *dictSearch(dictCtx dict, const char *id, void **plock);
-/*
- * Function: dictSearch - search for value in dictionary.
- * Description: Searches for <id> in <dict>, and returns value if
- * found, or NULL if not. If <plock> is non-NULL, then
- * the lock returned in <plock> will be associated with
- * the returned value. Until this lock is passed to
- * dictReleaseLock(), the value will not be passed to the
- * dictCleanupFunc callback (see dictCleanup()).
- * Input: dict - dictionary to search in.
- * id - identifier of item to find.
- * plock - place for value lock (or NULL).
- * Output: plock - set to value lock.
- * Return: Value associated with <id>, or NULL if <id> not found.
- * MT-Level: Safe if <dict> thread-safe.
- */
-
-void *dictNext(dictCtx dict, char **id, void **plock);
-/*
- * Function: dictNext - search for next value in dictionary.
- * Description: Can be used to iterate through values in the dictionary.
- * The order is the order of the hash of the ids, which
- * isn't usefully externally. Will return the value if
- * found, or NULL if not. If <plock> is non-NULL, then
- * the lock returned in <plock> will be associated with
- * the returned value. Until this lock is passed to
- * dictReleaseLock(), the value will not be passed to the
- * dictCleanupFunc callback (see dictCleanup()).
- * Input: dict - dictionary to iterate over.
- * id - pointer to identifier of last item found, or
- * pointer to NULL to retrieve first.
- * plock - place for value lock (or NULL).
- * Output: plock - set to value lock.
- * id - pointer to id of found value
- * Return: Value associated with <id>, or NULL if <id> not found.
- * MT-Level: Safe if <dict> thread-safe.
- */
-
-void dictReleaseLock(dictCtx dict, void *lock);
-/*
- * Function: dictReleaseLock - release lock on value.
- * Description: Releases the lock on the value associated with <lock>. Once
- * the lock is released, the dictCleanupFunc callback can
- * be called for the value (see dictCleanup()).
- * Input: dict - dictionary containing value to release.
- * lock - lock to release.
- * Output: None.
- * Return: None.
- * MT-Level: Safe if <dict> thread-safe.
- */
-
-NEOERR *dictSetValue(dictCtx dict, const char *id, void *value);
-/*
- * Function: dictSetValue - set/reset an items value.
- * Description: Updates the <id>/<value> pair into <dict>.
- * If <id> is not in <dict>, it is created.
- * Input: dict - dictionary to add pair to.
- * id - identifier to insert/update
- * value - value to store (may NOT be NULL)
- * Output: None.
- * Return: true if inserted/updated, false if error
- * MT-Level: Safe if <dict> thread-safe.
- */
-
-typedef NEOERR *(*dictNewValueCB)(const char *id, void *rock, void **new_val);
-typedef NEOERR *(*dictUpdateValueCB)(const char *id, void *value, void *rock);
-
-NEOERR *dictModifyValue(dictCtx dict, const char *id, dictNewValueCB new_cb,
- dictUpdateValueCB update, void *rock);
-/*
- * Function: dictModifyValue - create/modify an item.
- * Description: Finds <id>'s value and calls <update>. If <id> is
- * not in <dict>, calls <new> to obtain a new value.
- * Input: dict - dictionary to add pair to.
- * id - identifier of value
- * new - function to call to create new value (may be NULL)
- * update - function to call to modify value (if NULL, the old
- * value is freed, and <new> is used)
- * rock - context to pass to <new> or <update>.
- * Output: None.
- * Return: true if inserted/updated, false if error
- * MT-Level: Safe if <dict> thread-safe.
- */
-
-void dictCleanup(dictCtx dict, dictCleanupFunc cleanup, void *rock);
-/*
- * Function: dictCleanup - cleanup dictionary
- * Description: Calls <cleanup> for every item in <dict>. If <cleanup>
- * returns true, then item is removed from <dict>.
- * Input: dict - dictionary to cleanup
- * cleanup - cleanup callback
- * rock - to pass to <cleanup>
- * Output: None.
- * Return: None.
- * MT-Level: Safe if <dict> thread-safe.
- */
-
-__END_DECLS
-
-#endif /* __DICT_H_ */
diff --git a/util/filter.c b/util/filter.c
deleted file mode 100644
index 186cabd..0000000
--- a/util/filter.c
+++ /dev/null
@@ -1,221 +0,0 @@
-/* based on concepts from the mutt filter code...
- *
- * This code basically does what popen should have been... and what
- * popen2/popen3/popen4 in python do... it allows you access to
- * as many of stdin/stdout/stderr for a sub program as you want, instead
- * of just one (which is what popen is).
- */
-
-#include "cs_config.h"
-
-#include <unistd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/wait.h>
-
-#include "util/neo_misc.h"
-#include "util/neo_err.h"
-#include "util/filter.h"
-
-
-NEOERR *filter_wait (pid_t pid, int options, int *exitcode)
-{
- int r;
- pid_t rpid;
-
- rpid = waitpid (pid, &r, options);
- if (WIFEXITED(r))
- {
- r = WEXITSTATUS(r);
- if (exitcode)
- {
- *exitcode = r;
- /* If they're asking for the exit code, we don't generate an error */
- return STATUS_OK;
- }
- if (r == 0) return STATUS_OK;
- else return nerr_raise(NERR_SYSTEM, "Child %d returned status %d:", rpid,
- r);
- }
- if (WIFSIGNALED(r))
- {
- r = WTERMSIG(r);
- return nerr_raise(NERR_SYSTEM, "Child %d died on signal %d:", rpid, r);
- }
- if (WIFSTOPPED(r))
- {
- r = WSTOPSIG(r);
- return nerr_raise(NERR_SYSTEM, "Child %d stopped on signal %d:", rpid, r);
- }
-
- return nerr_raise(NERR_ASSERT, "ERROR: waitpid(%d, %d) returned (%d, %d)",
- pid, options, rpid, r);
-}
-
-NEOERR *filter_create_fd (const char *cmd, int *fdin, int *fdout, int *fderr,
- pid_t *pid)
-{
- int pi[2]={-1,-1}, po[2]={-1,-1}, pe[2]={-1,-1};
- int rpid;
-
- *pid = 0;
-
- if (fdin)
- {
- *fdin = 0;
- if (pipe (pi) == -1)
- return nerr_raise_errno(NERR_SYSTEM,
- "Unable to open in pipe for command: %s", cmd);
- }
-
- if (fdout)
- {
- *fdout = 0;
- if (pipe (po) == -1)
- {
- if (fdin)
- {
- close (pi[0]);
- close (pi[1]);
- }
- return nerr_raise_errno(NERR_SYSTEM,
- "Unable to open out pipe for command: %s", cmd);
- }
- }
-
- if (fderr)
- {
- *fderr = 0;
- if (pipe (pe) == -1)
- {
- if (fdin)
- {
- close (pi[0]);
- close (pi[1]);
- }
- if (fdout)
- {
- close (po[0]);
- close (po[1]);
- }
- return nerr_raise_errno(NERR_SYSTEM, "Unable to open err pipe for command: %s", cmd);
- }
- }
-
- /* block signals */
-
- if ((rpid = fork ()) == 0)
- {
- /* unblock signals */
-
- if (fdin)
- {
- close (pi[1]);
- dup2 (pi[0], 0);
- close (pi[0]);
- }
-
- if (fdout)
- {
- close (po[0]);
- dup2 (po[1], 1);
- close (po[1]);
- }
-
- if (fderr)
- {
- close (pe[0]);
- dup2 (pe[1], 2);
- close (pe[1]);
- }
-
- execl ("/bin/sh", "sh", "-c", cmd, (void *)NULL);
- _exit (127);
- }
- else if (rpid == -1)
- {
- /* unblock signals */
- if (fdin)
- {
- close (pi[0]);
- close (pi[1]);
- }
- if (fdout)
- {
- close (po[0]);
- close (po[1]);
- }
- if (fderr)
- {
- close (pe[0]);
- close (pe[1]);
- }
- return nerr_raise_errno(NERR_SYSTEM, "Unable to fork for command: %s", cmd);
- }
-
- if (fdout)
- {
- close (po[1]);
- *fdout = po[0];
- }
- if (fdin)
- {
- close (pi[0]);
- *fdin = pi[1];
- }
- if (fderr)
- {
- close (pe[1]);
- *fderr = pe[0];
- }
- *pid = rpid;
-
- return STATUS_OK;
-}
-
-NEOERR *filter_create_fp(const char *cmd, FILE **in, FILE **out, FILE **err,
- pid_t *pid)
-{
- NEOERR *nerr;
- int fdin = 0, fdout = 0, fderr = 0;
- int *pfdin = NULL, *pfdout = NULL, *pfderr = NULL;
-
- if (in) pfdin = &fdin;
- if (out) pfdout = &fdout;
- if (err) pfderr = &fderr;
-
- nerr = filter_create_fd(cmd, pfdin, pfdout, pfderr, pid);
- if (nerr) return nerr_pass(nerr);
-
- if (in)
- {
- *in = fdopen (fdin, "w");
- if (*in == NULL)
- return nerr_raise_errno(NERR_IO, "Unable to fdopen in for command: %s",
- cmd);
- }
-
- if (out)
- {
- *out = fdopen (fdout, "r");
- if (*out == NULL)
- {
- if (in) fclose(*in);
- return nerr_raise_errno(NERR_IO, "Unable to fdopen out for command: %s",
- cmd);
- }
- }
-
- if (err)
- {
- *err = fdopen (fderr, "r");
- if (*err == NULL)
- {
- if (in) fclose(*in);
- if (out) fclose(*out);
- return nerr_raise_errno(NERR_IO, "Unable to fdopen err for command: %s",
- cmd);
- }
- }
- return STATUS_OK;
-}
diff --git a/util/filter.h b/util/filter.h
deleted file mode 100644
index 834f114..0000000
--- a/util/filter.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#ifndef __NEO_FILTER_H_
-#define __NEO_FILTER_H_ 1
-
-__BEGIN_DECLS
-
-#include <stdarg.h>
-#include <stdio.h>
-#include "util/neo_misc.h"
-#include "util/neo_err.h"
-
-/*
- * Function: filter_wait - wrap waitpid to decode the exitcode and why
- * your filter quit
- * Description: filter_wait wraps the waitpid call and raises an error
- * (with description) if the call failed. Note that if the
- * ask for the exitcode and the process exited with a code
- * other than zero, we don't raise an error. If you don't
- * ask for the exitcode, and it is non-zero, we raise an
- * error
- * Input: pid -> the process identifier to wait for
- * options -> the options to pass to waitpid (see wait(2))
- * Output: exitcode -> the exitcode if the process existed normally
- * Returns: NERR_SYSTEM, NERR_ASSERT
- */
-NEOERR *filter_wait(pid_t pid, int options, int *exitcode);
-
-/*
- * Function: filter_create_fd - Create a sub process and return the
- * requested pipes
- * Description: filter_create_fd and filter_create_fp are what popen
- * should have been: a mechanism to create sub processes
- * and have pipes to all their input/output. The concept
- * was taken from mutt, though python has something similar
- * with popen3/popen4. You control which pipes the
- * function returns by the fdin/fdout/fderr arguments. A
- * NULL value means "don't create a pipe", a pointer to an
- * int will cause the pipes to be created and the value
- * of the file descriptor stored in the int. You will have
- * to close(2) the file descriptors yourself.
- * Input: cmd -> the sub command to execute. Will be executed with
- * /bin/sh -c
- * fdin -> pointer to return the stdin pipe, or NULL if you don't
- * want the stdin pipe
- * fdout -> pointer to return the stdout pipe, or NULL if you don't
- * want the stdout pipe
- * fderr -> pointer to return the stderr pipe, or NULL if you don't
- * want the stderr pipe
- * Output: fdin -> the stdin file descriptor of the sub process
- * fdout -> the stdout file descriptor of the sub process
- * fderr -> the stderr file descriptor of the sub process
- * pid -> the pid of the sub process
- * Returns: NERR_SYSTEM
- */
-NEOERR *filter_create_fd(const char *cmd, int *fdin, int *fdout, int *fderr,
- pid_t *pid);
-
-/*
- * Function: filter_create_fp - similar to filter_create_fd except with
- * buffered FILE*
- * Description: filter_create_fp is identical to filter_create_fd,
- * except each of the pipes is wrapped in a buffered stdio FILE
- * Input: cmd -> the sub command to execute. Will be executed with
- * /bin/sh -c
- * in -> pointer to return the stdin pipe, or NULL if you don't
- * want the stdin pipe
- * out -> pointer to return the stdout pipe, or NULL if you don't
- * want the stdout pipe
- * err -> pointer to return the stderr pipe, or NULL if you don't
- * want the stderr pipe
- * Output: in -> the stdin FILE of the sub process
- * out -> the stdout FILE of the sub process
- * err -> the stderr FILE of the sub process
- * pid -> the pid of the sub process
- * Returns: NERR_SYSTEM, NERR_IO
- */
-NEOERR *filter_create_fp(const char *cmd, FILE **in, FILE **out, FILE **err,
- pid_t *pid);
-
-__END_DECLS
-
-#endif /* __NEO_FILTER_H_ */
diff --git a/util/missing.c b/util/missing.c
deleted file mode 100644
index bb9e5ec..0000000
--- a/util/missing.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/* Missing Functions
- *
- * The functions included here are provided as replacements for system
- * library functions that are missing (or broken).
- *
- * Yes, configure usually tries to get you to have a single file for
- * each function, but pppbbbttthhhhh.
- *
- * To my knowledge, each of these replacement functions are available as
- * free code... if not, I'll have to steal them from somewhere else that
- * is free (hmm, FreeBSD libc?)
- */
-
-#include "cs_config.h"
-
-#ifndef HAVE_STRTOK_R
-#include <string.h>
-
-/* from glibc */
-/* Parse S into tokens separated by characters in DELIM.
- If S is NULL, the saved pointer in SAVE_PTR is used as
- the next starting point. For example:
- char s[] = "-abc-=-def";
- char *sp;
- x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def"
- x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL
- x = strtok_r(NULL, "=", &sp); // x = NULL
- // s = "abc\0-def\0"
-*/
-
-char * strtok_r (char *s,const char * delim, char **save_ptr)
-{
- char *token;
-
- if (s == NULL)
- s = *save_ptr;
-
- /* Scan leading delimiters. */
- s += strspn (s, delim);
- if (*s == '\0')
- {
- *save_ptr = s;
- return NULL;
- }
-
- /* Find the end of the token. */
- token = s;
- s = strpbrk (token, delim);
- if (s == NULL)
- /* This token finishes the string. */
- /**save_ptr = __rawmemchr (token, '\0');*/
- *save_ptr = strchr (token, '\0');
- else
- {
- /* Terminate the token and make
- * *SAVE_PTR point past it. */
- *s = '\0';
- *save_ptr = s + 1;
- }
- return token;
-}
-#endif
-
-#include <time.h>
-
-#ifndef HAVE_LOCALTIME_R
-
-struct tm *localtime_r (const time_t *timep, struct tm *ttm)
-{
- ttm = localtime(timep);
- return ttm;
-}
-#endif
-
-#ifndef HAVE_GMTIME_R
-struct tm *gmtime_r(const time_t *timep, struct tm *ttm)
-{
- ttm = gmtime(timep);
- return ttm;
-}
-
-#endif
-
-#ifndef HAVE_MKSTEMP
-#include <fcntl.h>
-
-int mkstemp(char *path)
-{
- return open(mktemp(path),O_RDWR);
-}
-#endif
diff --git a/util/neo_date.c b/util/neo_date.c
deleted file mode 100644
index e29227b..0000000
--- a/util/neo_date.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#include "cs_config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-#include <limits.h>
-#include "util/neo_misc.h"
-#include "neo_date.h"
-
-/* This is pretty much a HACK. Eventually, we might bring the parsing
- * and stuff into this library (we can use the public domain source code
- * from ftp://elsie.nci.nih.gov/pub/ as a base)
- *
- * For now, we just do a putenv(TZ)... which sucks, especially since
- * many versions of putenv do a strdup... and then leak the memory the
- * next time you putenv the same var.
- */
-
-/* Since this is set to a partial filename and TZ=, it can't be bigger
- * than this */
-static char TzBuf[_POSIX_PATH_MAX + 4];
-
-static int time_set_tz (const char *mytimezone)
-{
- snprintf (TzBuf, sizeof(TzBuf), "TZ=%s", mytimezone);
- putenv(TzBuf);
- tzset();
- return 0;
-}
-
-void neo_time_expand (const time_t tt, const char *mytimezone, struct tm *ttm)
-{
- const char *cur_tz = getenv("TZ");
- int change_back = 0;
- if (cur_tz == NULL || strcmp(mytimezone, cur_tz)) {
- time_set_tz (mytimezone);
- change_back = 1;
- }
- localtime_r (&tt, ttm);
- if (cur_tz && change_back) {
- time_set_tz(cur_tz);
- }
-}
-
-time_t neo_time_compact (struct tm *ttm, const char *mytimezone)
-{
- time_t r;
- int save_isdst = ttm->tm_isdst;
-
- const char *cur_tz = getenv("TZ");
- int change_back = 0;
- if (cur_tz == NULL || strcmp(mytimezone, cur_tz)) {
- time_set_tz (mytimezone);
- change_back = 1;
- }
- ttm->tm_isdst = -1;
- r = mktime(ttm);
- ttm->tm_isdst = save_isdst;
- if (cur_tz && change_back) {
- time_set_tz(cur_tz);
- }
- return r;
-}
-
-/* Hefted from NCSA HTTPd src/util.c -- What a pain in the ass. */
-long neo_tz_offset(struct tm *ttm) {
- /* We assume here that HAVE_TM_ZONE implies HAVE_TM_GMTOFF and
- * HAVE_TZNAME implies HAVE_TIMEZONE since AC_STRUCT_TIMEZONE defines
- * the former and not the latter */
-#if defined(HAVE_TM_ZONE)
- return ttm->tm_gmtoff;
-#elif defined(HAVE_TZNAME)
- long tz;
-#ifndef __CYGWIN__
- tz = - timezone;
-#else
- tz = - _timezone;
-#endif
- if(ttm->tm_isdst)
- tz += 3600;
- return tz;
-#else
- long tz;
- struct tm loc_tm, gmt_tm;
- time_t tt;
-
- /* We probably shouldn't use the _r versions here since this
- * is for older platforms... */
- tt = time(NULL);
- localtime_r(&tt, &loc_tm);
- gmtime_r(&tt, &gmt_tm);
-
- tz = mktime(&loc_tm) - mktime(&gmt_tm);
- return tz;
-#endif /* GMT OFFSet Crap */
-}
-
diff --git a/util/neo_date.h b/util/neo_date.h
deleted file mode 100644
index 5d9b229..0000000
--- a/util/neo_date.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#ifndef __NEO_DATE_H_
-#define __NEO_DATE_H_ 1
-
-#include <time.h>
-
-__BEGIN_DECLS
-
-/* UTC time_t -> struct tm in local timezone */
-void neo_time_expand (const time_t tt, const char *timezone, struct tm *ttm);
-
-/* local timezone struct tm -> time_t UTC */
-time_t neo_time_compact (struct tm *ttm, const char *timezone);
-
-/* To be portable... in seconds */
-long neo_tz_offset(struct tm *ttm);
-
-__END_DECLS
-
-#endif /* __NEO_DATE_H_ */
diff --git a/util/neo_err.c b/util/neo_err.c
deleted file mode 100644
index c85c05c..0000000
--- a/util/neo_err.c
+++ /dev/null
@@ -1,472 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#include "cs_config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <errno.h>
-#include <string.h>
-
-#include "neo_misc.h"
-#include "neo_err.h"
-#include "ulist.h"
-#include "ulocks.h"
-
-int NERR_PASS = -1;
-int NERR_ASSERT = 0;
-int NERR_NOT_FOUND = 0;
-int NERR_DUPLICATE = 0;
-int NERR_NOMEM = 0;
-int NERR_PARSE = 0;
-int NERR_OUTOFRANGE = 0;
-int NERR_SYSTEM = 0;
-int NERR_IO = 0;
-int NERR_LOCK = 0;
-int NERR_DB = 0;
-int NERR_EXISTS = 0;
-
-static NEOERR *FreeList = NULL;
-static ULIST *Errors = NULL;
-static int Inited = 0;
-#ifdef HAVE_PTHREADS
-/* In multi-threaded environments, we have to init thread safely */
-static pthread_mutex_t InitLock = PTHREAD_MUTEX_INITIALIZER;
-#endif
-
-/* Set this to 1 to enable non-thread safe re-use of NEOERR data
- * structures. This was a premature performance optimization that isn't
- * thread safe, if we want it thread safe we need to add mutex code...
- * which has its own performance penalties...
- */
-static int UseFreeList = 0;
-
-static NEOERR *_err_alloc(void)
-{
- NEOERR *err;
-
- if (!UseFreeList || FreeList == NULL)
- {
- err = (NEOERR *)calloc (1, sizeof (NEOERR));
- if (err == NULL)
- {
- ne_warn ("INTERNAL ERROR: Unable to allocate memory for NEOERR");
- return INTERNAL_ERR;
- }
- return err;
- }
- else
- {
- err = FreeList;
- FreeList = FreeList->next;
- }
- err->flags |= NE_IN_USE;
- err->next = NULL;
- return err;
-}
-
-static int _err_free (NEOERR *err)
-{
- if (err == NULL || err == INTERNAL_ERR)
- return 0;
- if (err->next != NULL)
- _err_free(err->next);
- if (UseFreeList)
- {
- err->next = FreeList;
- FreeList = err;
- err->flags = 0;
- err->desc[0] = '\0';
- }
- else
- {
- free(err);
- }
- return 0;
-}
-
-NEOERR *nerr_raisef (const char *func, const char *file, int lineno, int error,
- const char *fmt, ...)
-{
- NEOERR *err;
- va_list ap;
-
- err = _err_alloc();
- if (err == INTERNAL_ERR)
- return err;
-
- va_start(ap, fmt);
- vsnprintf (err->desc, sizeof(err->desc), fmt, ap);
- va_end(ap);
-
- err->error = error;
- err->func = func;
- err->file = file;
- err->lineno = lineno;
-
- return err;
-}
-
-NEOERR *nerr_raise_errnof (const char *func, const char *file, int lineno,
- int error, const char *fmt, ...)
-{
- NEOERR *err;
- va_list ap;
- int l;
-
- err = _err_alloc();
- if (err == INTERNAL_ERR)
- return err;
-
- va_start(ap, fmt);
- vsnprintf (err->desc, sizeof(err->desc), fmt, ap);
- va_end(ap);
-
- l = strlen(err->desc);
- snprintf (err->desc + l, sizeof(err->desc)-l, ": [%d] %s", errno,
- strerror (errno));
-
- err->error = error;
- err->func = func;
- err->file = file;
- err->lineno = lineno;
-
- return err;
-}
-
-NEOERR *nerr_passf (const char *func, const char *file, int lineno, NEOERR *err)
-{
- NEOERR *nerr;
-
- if (err == STATUS_OK)
- return err;
-
- nerr = _err_alloc();
- if (nerr == INTERNAL_ERR)
- return err;
-
- nerr->error = NERR_PASS;
- nerr->func = func;
- nerr->file = file;
- nerr->lineno = lineno;
- nerr->next = err;
-
- return nerr;
-}
-
-NEOERR *nerr_pass_ctxf (const char *func, const char *file, int lineno,
- NEOERR *err, const char *fmt, ...)
-{
- NEOERR *nerr;
- va_list ap;
-
- if (err == STATUS_OK)
- return err;
-
- nerr = _err_alloc();
- if (nerr == INTERNAL_ERR)
- return err;
-
- va_start(ap, fmt);
- vsnprintf (nerr->desc, sizeof(nerr->desc), fmt, ap);
- va_end(ap);
-
- nerr->error = NERR_PASS;
- nerr->func = func;
- nerr->file = file;
- nerr->lineno = lineno;
- nerr->next = err;
-
- return nerr;
-}
-
-/* In the future, we'll allow someone to register an error handler */
-void nerr_log_error (NEOERR *err)
-{
- NEOERR *more;
- char buf[1024];
- char *err_name;
-
- if (err == STATUS_OK)
- return;
-
- if (err == INTERNAL_ERR)
- {
- ne_warn ("Internal error");
- return;
- }
-
- more = err;
- fprintf (stderr, "Traceback (innermost last):\n");
- while (more && more != INTERNAL_ERR)
- {
- err = more;
- more = err->next;
- if (err->error != NERR_PASS)
- {
- NEOERR *r;
- if (err->error == 0)
- {
- err_name = buf;
- snprintf (buf, sizeof (buf), "Unknown Error");
- }
- else
- {
- r = uListGet (Errors, err->error - 1, (void *)&err_name);
- if (r != STATUS_OK)
- {
- err_name = buf;
- snprintf (buf, sizeof (buf), "Error %d", err->error);
- }
- }
-
- fprintf (stderr, " File \"%s\", line %d, in %s()\n%s: %s\n", err->file,
- err->lineno, err->func, err_name, err->desc);
- }
- else
- {
- fprintf (stderr, " File \"%s\", line %d, in %s()\n", err->file,
- err->lineno, err->func);
- if (err->desc[0])
- {
- fprintf (stderr, " %s\n", err->desc);
- }
- }
- }
-}
-
-void nerr_error_string (NEOERR *err, STRING *str)
-{
- NEOERR *more;
- char buf[1024];
- char *err_name;
-
- if (err == STATUS_OK)
- return;
-
- if (err == INTERNAL_ERR)
- {
- string_append (str, "Internal error");
- return;
- }
-
- more = err;
- while (more && more != INTERNAL_ERR)
- {
- err = more;
- more = err->next;
- if (err->error != NERR_PASS)
- {
- NEOERR *r;
- if (err->error == 0)
- {
- err_name = buf;
- snprintf (buf, sizeof (buf), "Unknown Error");
- }
- else
- {
- r = uListGet (Errors, err->error - 1, (void *)&err_name);
- if (r != STATUS_OK)
- {
- err_name = buf;
- snprintf (buf, sizeof (buf), "Error %d", err->error);
- }
- }
-
- string_appendf(str, "%s: %s", err_name, err->desc);
- return;
- }
- }
-}
-
-void nerr_error_traceback (NEOERR *err, STRING *str)
-{
- NEOERR *more;
- char buf[1024];
- char buf2[1024];
- char *err_name;
-
- if (err == STATUS_OK)
- return;
-
- if (err == INTERNAL_ERR)
- {
- string_append (str, "Internal error");
- return;
- }
-
- more = err;
- string_append (str, "Traceback (innermost last):\n");
- while (more && more != INTERNAL_ERR)
- {
- err = more;
- more = err->next;
- if (err->error != NERR_PASS)
- {
- NEOERR *r;
- if (err->error == 0)
- {
- err_name = buf;
- snprintf (buf, sizeof (buf), "Unknown Error");
- }
- else
- {
- r = uListGet (Errors, err->error - 1, (void *)&err_name);
- if (r != STATUS_OK)
- {
- err_name = buf;
- snprintf (buf, sizeof (buf), "Error %d", err->error);
- }
- }
-
- snprintf (buf2, sizeof(buf2),
- " File \"%s\", line %d, in %s()\n%s: %s\n", err->file,
- err->lineno, err->func, err_name, err->desc);
- string_append(str, buf2);
- }
- else
- {
- snprintf (buf2, sizeof(buf2), " File \"%s\", line %d, in %s()\n",
- err->file, err->lineno, err->func);
- string_append(str, buf2);
- if (err->desc[0])
- {
- snprintf (buf2, sizeof(buf2), " %s\n", err->desc);
- string_append(str, buf2);
- }
- }
- }
-}
-
-void nerr_ignore (NEOERR **err)
-{
- _err_free (*err);
- *err = STATUS_OK;
-}
-
-int nerr_handle (NEOERR **err, int etype)
-{
- NEOERR *walk = *err;
-
- while (walk != STATUS_OK && walk != INTERNAL_ERR)
- {
-
- if (walk->error == etype)
- {
- _err_free(*err);
- *err = STATUS_OK;
- return 1;
- }
- walk = walk->next;
- }
-
- if (walk == STATUS_OK && etype == STATUS_OK_INT)
- return 1;
- if (walk == STATUS_OK)
- return 0;
-
- if (walk == INTERNAL_ERR && etype == INTERNAL_ERR_INT)
- {
- *err = STATUS_OK;
- return 1;
- }
- if (walk == INTERNAL_ERR)
- return 0;
-
- return 0;
-}
-
-int nerr_match (NEOERR *err, int etype)
-{
- while (err != STATUS_OK && err != INTERNAL_ERR)
- {
-
- if (err->error == etype)
- return 1;
- err = err->next;
- }
-
- if (err == STATUS_OK && etype == STATUS_OK_INT)
- return 1;
- if (err == STATUS_OK)
- return 0;
-
- if (err == INTERNAL_ERR && etype == INTERNAL_ERR_INT)
- return 1;
- if (err == INTERNAL_ERR)
- return 0;
-
- return 0;
-}
-
-NEOERR *nerr_register (int *val, const char *name)
-{
- NEOERR *err;
-
- err = uListAppend (Errors, (void *) name);
- if (err != STATUS_OK) return nerr_pass(err);
-
- *val = uListLength(Errors);
- return STATUS_OK;
-}
-
-NEOERR *nerr_init (void)
-{
- NEOERR *err;
-
- if (Inited == 0)
- {
-#ifdef HAVE_PTHREADS
- /* In threaded environments, we have to mutex lock to do this init, but
- * we don't want to use a mutex every time to check that it was Inited.
- * So, we only lock if our first test of Inited was false */
- err = mLock(&InitLock);
- if (err != STATUS_OK) return nerr_pass(err);
- if (Inited == 0) {
-#endif
- err = uListInit (&Errors, 10, 0);
- if (err != STATUS_OK) return nerr_pass(err);
-
- err = nerr_register (&NERR_PASS, "InternalPass");
- if (err != STATUS_OK) return nerr_pass(err);
- err = nerr_register (&NERR_ASSERT, "AssertError");
- if (err != STATUS_OK) return nerr_pass(err);
- err = nerr_register (&NERR_NOT_FOUND, "NotFoundError");
- if (err != STATUS_OK) return nerr_pass(err);
- err = nerr_register (&NERR_DUPLICATE, "DuplicateError");
- if (err != STATUS_OK) return nerr_pass(err);
- err = nerr_register (&NERR_NOMEM, "MemoryError");
- if (err != STATUS_OK) return nerr_pass(err);
- err = nerr_register (&NERR_PARSE, "ParseError");
- if (err != STATUS_OK) return nerr_pass(err);
- err = nerr_register (&NERR_OUTOFRANGE, "RangeError");
- if (err != STATUS_OK) return nerr_pass(err);
- err = nerr_register (&NERR_SYSTEM, "SystemError");
- if (err != STATUS_OK) return nerr_pass(err);
- err = nerr_register (&NERR_IO, "IOError");
- if (err != STATUS_OK) return nerr_pass(err);
- err = nerr_register (&NERR_LOCK, "LockError");
- if (err != STATUS_OK) return nerr_pass(err);
- err = nerr_register (&NERR_DB, "DBError");
- if (err != STATUS_OK) return nerr_pass(err);
- err = nerr_register (&NERR_EXISTS, "ExistsError");
- if (err != STATUS_OK) return nerr_pass(err);
-
- Inited = 1;
-#ifdef HAVE_PTHREADS
- }
- err = mUnlock(&InitLock);
- if (err != STATUS_OK) return nerr_pass(err);
-#endif
- }
- return STATUS_OK;
-}
diff --git a/util/neo_err.h b/util/neo_err.h
deleted file mode 100644
index 5d5b4d0..0000000
--- a/util/neo_err.h
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#ifndef __NEO_ERR_H_
-#define __NEO_ERR_H_ 1
-
-#include "util/neo_misc.h"
-
-/* For compilers (well, cpp actually) which don't define __PRETTY_FUNCTION__ */
-#ifndef __GNUC__
-#define __PRETTY_FUNCTION__ "unknown_function"
-#endif
-
-__BEGIN_DECLS
-
-/* For 64 bit systems which don't like mixing ints and pointers, we have the
- * _INT version for doing that comparison */
-#define STATUS_OK ((NEOERR *)0)
-#define STATUS_OK_INT 0
-#define INTERNAL_ERR ((NEOERR *)1)
-#define INTERNAL_ERR_INT 1
-
-/* NEOERR flags */
-#define NE_IN_USE (1<<0)
-
-typedef int NERR_TYPE;
-
-/* Predefined Error Types - These are all registered in nerr_init */
-extern NERR_TYPE NERR_PASS;
-extern NERR_TYPE NERR_ASSERT;
-extern NERR_TYPE NERR_NOT_FOUND;
-extern NERR_TYPE NERR_DUPLICATE;
-extern NERR_TYPE NERR_NOMEM;
-extern NERR_TYPE NERR_PARSE;
-extern NERR_TYPE NERR_OUTOFRANGE;
-extern NERR_TYPE NERR_SYSTEM;
-extern NERR_TYPE NERR_IO;
-extern NERR_TYPE NERR_LOCK;
-extern NERR_TYPE NERR_DB;
-extern NERR_TYPE NERR_EXISTS;
-
-typedef struct _neo_err
-{
- int error;
- int err_stack;
- int flags;
- char desc[256];
- const char *file;
- const char *func;
- int lineno;
- /* internal use only */
- struct _neo_err *next;
-} NEOERR;
-
-/* Technically, we could do this in configure and detect what their compiler
- * can handle, but for now... */
-#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-#define USE_C99_VARARG_MACROS 1
-#elif __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 4) || defined (S_SPLINT_S)
-#define USE_GNUC_VARARG_MACROS 1
-#else
-#error The compiler is missing support for variable-argument macros.
-#endif
-
-
-/*
- * function: nerr_raise
- * description: Use this method to create an error "exception" for
- * return up the call chain
- * arguments: using the macro, the function name, file, and lineno are
- * automagically recorded for you. You just provide the
- * error (from those listed above) and the printf-style
- * reason. THIS IS A PRINTF STYLE FUNCTION, DO NOT PASS
- * UNKNOWN STRING DATA AS THE FORMAT STRING.
- * returns: a pointer to a NEOERR, or INTERNAL_ERR if allocation of
- * NEOERR fails
- */
-#if defined(USE_C99_VARARG_MACROS)
-#define nerr_raise(e,f,...) \
- nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
-#elif defined(USE_GNUC_VARARG_MACROS)
-#define nerr_raise(e,f,a...) \
- nerr_raisef(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,##a)
-#endif
-
-NEOERR *nerr_raisef (const char *func, const char *file, int lineno,
- NERR_TYPE error, const char *fmt, ...)
- ATTRIBUTE_PRINTF(5,6);
-
-
-
-#if defined(USE_C99_VARARG_MACROS)
-#define nerr_raise_errno(e,f,...) \
- nerr_raise_errnof(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
-#elif defined(USE_GNUC_VARARG_MACROS)
-#define nerr_raise_errno(e,f,a...) \
- nerr_raise_errnof(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,##a)
-#endif
-
-NEOERR *nerr_raise_errnof (const char *func, const char *file, int lineno,
- int error, const char *fmt, ...)
- ATTRIBUTE_PRINTF(5,6);
-
-/* function: nerr_pass
- * description: this function is used to pass an error up a level in the
- * call chain (ie, if the error isn't handled at the
- * current level). This allows us to track the traceback
- * of the error.
- * arguments: with the macro, the function name, file and lineno are
- * automagically recorded. Just pass the error.
- * returns: a pointer to an error
- */
-#define nerr_pass(e) \
- nerr_passf(__PRETTY_FUNCTION__,__FILE__,__LINE__,e)
-
-NEOERR *nerr_passf (const char *func, const char *file, int lineno,
- NEOERR *err);
-
-/* function: nerr_pass_ctx
- * description: this function is used to pass an error up a level in the
- * call chain (ie, if the error isn't handled at the
- * current level). This allows us to track the traceback
- * of the error.
- * This version includes context information about lower
- * errors
- * arguments: with the macro, the function name, file and lineno are
- * automagically recorded. Just pass the error and
- * a printf format string giving more information about where
- * the error is occuring.
- * returns: a pointer to an error
- */
-#if defined(USE_C99_VARARG_MACROS)
-#define nerr_pass_ctx(e,f,...) \
- nerr_pass_ctxf(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,__VA_ARGS__)
-#elif defined(USE_GNUC_VARARG_MACROS)
-#define nerr_pass_ctx(e,f,a...) \
- nerr_pass_ctxf(__PRETTY_FUNCTION__,__FILE__,__LINE__,e,f,##a)
-#endif
-
-NEOERR *nerr_pass_ctxf (const char *func, const char *file, int lineno,
- NEOERR *err, const char *fmt, ...)
- ATTRIBUTE_PRINTF(5,6);
-
-/* function: nerr_log_error
- * description: currently, this prints out the error to stderr, and
- * free's the error chain
- */
-void nerr_log_error (NEOERR *err);
-
-#include "util/neo_str.h"
-/* function: nerr_error_string
- * description: returns the string associated with an error (the bottom
- * level of the error chain)
- * arguments: err - error
- * str - string to which the data is appended
- * returns: None - errors appending to the string are ignored
- */
-void nerr_error_string (NEOERR *err, STRING *str);
-
-/* function: nerr_error_traceback
- * description: returns the full traceback of the error chain
- * arguments: err - error
- * str - string to which the data is appended
- * returns: None - errors appending to the string are ignored
- */
-void nerr_error_traceback (NEOERR *err, STRING *str);
-
-/* function: nerr_ignore
- * description: you should only call this if you actually handle the
- * error (should I rename it?). Free's the error chain.
- */
-void nerr_ignore (NEOERR **err);
-
-/* function: nerr_register
- * description: register an error type. This will assign a numeric value
- * to the type, and keep track of the "pretty name" for it.
- * arguments: err - pointer to a NERR_TYPE
- * name - pretty name for the error type
- * returns: NERR_NOMEM on no memory
- */
-NEOERR *nerr_register (NERR_TYPE *err, const char *name);
-
-/* function: nerr_init
- * description: initialize the NEOERR system. Can be called more than once.
- * Is not thread safe. This registers all of the built in
- * error types as defined at the top of this file. If you don't
- * call this, all exceptions will be returned as UnknownError.
- * arguments: None
- * returns: possibly NERR_NOMEM, but somewhat unlikely. Possibly an
- * UnknownError if NERR_NOMEM hasn't been registered yet.
- */
-NEOERR *nerr_init (void);
-
-/* function: nerr_match
- * description: nerr_match is used to walk the NEOERR chain and match
- * the error against a specific error type. In exception
- * parlance, this would be the equivalent of "catch".
- * Typically, you can just compare a NEOERR against STATUS_OK
- * or just test for true if you are checking for any error.
- * arguments: err - the NEOERR that has an error.
- * type - the NEOERR type, as registered with nerr_register
- * returns: true on match
- */
-int nerr_match (NEOERR *err, NERR_TYPE type);
-
-/* function: nerr_handle
- * description: nerr_handle is a convenience function. It is the equivalent
- * of nerr_match, but it will also deallocate the error chain
- * on a match.
- * arguments: err - pointer to a pointer NEOERR
- * type - the NEOERR type, as registered with nerr_register
- * returns: true on match
- */
-int nerr_handle (NEOERR **err, NERR_TYPE type);
-
-__END_DECLS
-
-#endif /* __NEO_ERR_H_ */
diff --git a/util/neo_files.c b/util/neo_files.c
deleted file mode 100644
index 4a7f350..0000000
--- a/util/neo_files.c
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#include "cs_config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-#include <limits.h>
-#include <dirent.h>
-#include <sys/stat.h>
-
-#include "neo_misc.h"
-#include "neo_err.h"
-#include "neo_files.h"
-#include "wildmat.h"
-
-NEOERR *ne_mkdirs (const char *path, mode_t mode)
-{
- char mypath[_POSIX_PATH_MAX];
- int x;
- int r;
-
- strncpy (mypath, path, sizeof(mypath));
- x = strlen(mypath);
- if ((x < sizeof(mypath)) && (mypath[x-1] != '/'))
- {
- mypath[x] = '/';
- mypath[x+1] = '\0';
- }
-
- for (x = 1; mypath[x]; x++)
- {
- if (mypath[x] == '/')
- {
- mypath[x] = '\0';
-#ifdef __MINGW32__
- /* Braindead MINGW32 doesn't just have a dummy argument for mode */
- r = mkdir (mypath);
-#else
- r = mkdir (mypath, mode);
-#endif
-
- if (r == -1 && errno != EEXIST)
- {
- return nerr_raise_errno(NERR_SYSTEM, "ne_mkdirs: mkdir(%s, %x) failed", mypath, mode);
- }
- mypath[x] = '/';
- }
- }
- return STATUS_OK;
-}
-
-NEOERR *ne_load_file_len (const char *path, char **str, int *out_len)
-{
- struct stat s;
- int fd;
- int len;
- int bytes_read;
-
- *str = NULL;
- if (out_len) *out_len = 0;
-
- if (stat(path, &s) == -1)
- {
- if (errno == ENOENT)
- return nerr_raise (NERR_NOT_FOUND, "File %s not found", path);
- return nerr_raise_errno (NERR_SYSTEM, "Unable to stat file %s", path);
- }
-
- fd = open (path, O_RDONLY);
- if (fd == -1)
- {
- return nerr_raise_errno (NERR_SYSTEM, "Unable to open file %s", path);
- }
- len = s.st_size;
- *str = (char *) malloc (len + 1);
-
- if (*str == NULL)
- {
- close(fd);
- return nerr_raise (NERR_NOMEM,
- "Unable to allocate memory (%d) to load file %s", len + 1, path);
- }
- if ((bytes_read = read (fd, *str, len)) == -1)
- {
- close(fd);
- free(*str);
- return nerr_raise_errno (NERR_SYSTEM, "Unable to read file %s", path);
- }
-
- (*str)[bytes_read] = '\0';
- close(fd);
- if (out_len) *out_len = bytes_read;
-
- return STATUS_OK;
-}
-
-NEOERR *ne_load_file (const char *path, char **str) {
- return ne_load_file_len (path, str, NULL);
-}
-
-NEOERR *ne_save_file (const char *path, char *str)
-{
- NEOERR *err;
- int fd;
- int w, l;
-
- fd = open (path, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP );
- if (fd == -1)
- {
- return nerr_raise_errno (NERR_IO, "Unable to create file %s", path);
- }
- l = strlen(str);
- w = write (fd, str, l);
- if (w != l)
- {
- err = nerr_raise_errno (NERR_IO, "Unable to write file %s", path);
- close (fd);
- return err;
- }
- close (fd);
-
- return STATUS_OK;
-}
-
-NEOERR *ne_remove_dir (const char *path)
-{
- NEOERR *err;
- DIR *dp;
- struct stat s;
- struct dirent *de;
- char npath[_POSIX_PATH_MAX];
-
- if (stat(path, &s) == -1)
- {
- if (errno == ENOENT) return STATUS_OK;
- return nerr_raise_errno (NERR_SYSTEM, "Unable to stat file %s", path);
- }
- if (!S_ISDIR(s.st_mode))
- {
- return nerr_raise (NERR_ASSERT, "Path %s is not a directory", path);
- }
- dp = opendir(path);
- if (dp == NULL)
- return nerr_raise_errno (NERR_IO, "Unable to open directory %s", path);
- while ((de = readdir (dp)) != NULL)
- {
- if (strcmp(de->d_name, ".") && strcmp(de->d_name, ".."))
- {
- snprintf (npath, sizeof(npath), "%s/%s", path, de->d_name);
- if (stat(npath, &s) == -1)
- {
- if (errno == ENOENT) continue;
- closedir(dp);
- return nerr_raise_errno (NERR_SYSTEM, "Unable to stat file %s", npath);
- }
- if (S_ISDIR(s.st_mode))
- {
- err = ne_remove_dir(npath);
- if (err) break;
- }
- else
- {
- if (unlink(npath) == -1)
- {
- if (errno == ENOENT) continue;
- closedir(dp);
- return nerr_raise_errno (NERR_SYSTEM, "Unable to unlink file %s",
- npath);
- }
- }
- }
- }
- closedir(dp);
- if (rmdir(path) == -1)
- {
- return nerr_raise_errno (NERR_SYSTEM, "Unable to rmdir %s", path);
- }
- return STATUS_OK;
-}
-
-NEOERR *ne_listdir(const char *path, ULIST **files)
-{
- return nerr_pass(ne_listdir_fmatch(path, files, NULL, NULL));
-}
-
-static int _glob_match(void *rock, const char *filename)
-{
- return wildmat(filename, rock);
-}
-
-NEOERR *ne_listdir_match(const char *path, ULIST **files, const char *match)
-{
- return nerr_pass(ne_listdir_fmatch(path, files, _glob_match, (void *)match));
-}
-
-NEOERR *ne_listdir_fmatch(const char *path, ULIST **files, MATCH_FUNC fmatch,
- void *rock)
-{
- DIR *dp;
- struct dirent *de;
- ULIST *myfiles = NULL;
- NEOERR *err = STATUS_OK;
-
- if (files == NULL)
- return nerr_raise(NERR_ASSERT, "Invalid call to ne_listdir_fmatch");
-
- if (*files == NULL)
- {
- err = uListInit(&myfiles, 10, 0);
- if (err) return nerr_pass(err);
- }
- else
- {
- myfiles = *files;
- }
-
- if ((dp = opendir (path)) == NULL)
- {
- return nerr_raise_errno(NERR_IO, "Unable to opendir %s", path);
- }
- while ((de = readdir (dp)) != NULL)
- {
- if (!strcmp(de->d_name, ".") || !strcmp(de->d_name, ".."))
- continue;
-
- if (fmatch != NULL && !fmatch(rock, de->d_name))
- continue;
-
- err = uListAppend(myfiles, strdup(de->d_name));
- if (err) break;
- }
- closedir(dp);
- if (err && *files == NULL)
- {
- uListDestroy(&myfiles, ULIST_FREE);
- }
- else if (*files == NULL)
- {
- *files = myfiles;
- }
- return nerr_pass(err);
-}
diff --git a/util/neo_files.h b/util/neo_files.h
deleted file mode 100644
index b11b8b6..0000000
--- a/util/neo_files.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#ifndef __NEO_FILES_H_
-#define __NEO_FILES_H_ 1
-
-__BEGIN_DECLS
-
-#include <stdarg.h>
-#include <sys/types.h>
-#include "util/ulist.h"
-
-
-
-typedef int (* MATCH_FUNC)(void *rock, const char *filename);
-
-NEOERR *ne_mkdirs (const char *path, mode_t mode);
-NEOERR *ne_load_file (const char *path, char **str);
-NEOERR *ne_load_file_len (const char *path, char **str, int *len);
-NEOERR *ne_save_file (const char *path, char *str);
-NEOERR *ne_remove_dir (const char *path);
-NEOERR *ne_listdir(const char *path, ULIST **files);
-NEOERR *ne_listdir_match(const char *path, ULIST **files, const char *match);
-NEOERR *ne_listdir_fmatch(const char *path, ULIST **files, MATCH_FUNC fmatch,
- void *rock);
-
-__END_DECLS
-
-#endif /* __NEO_FILES_H_ */
diff --git a/util/neo_hash.c b/util/neo_hash.c
deleted file mode 100644
index 33942ec..0000000
--- a/util/neo_hash.c
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- * Copyright 2003-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#include "cs_config.h"
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "neo_misc.h"
-#include "neo_err.h"
-#include "neo_hash.h"
-
-static NEOERR *_hash_resize(NE_HASH *hash);
-static NE_HASHNODE **_hash_lookup_node (NE_HASH *hash, void *key, UINT32 *hashv);
-
-NEOERR *ne_hash_init (NE_HASH **hash, NE_HASH_FUNC hash_func, NE_COMP_FUNC comp_func)
-{
- NE_HASH *my_hash = NULL;
-
- my_hash = (NE_HASH *) calloc(1, sizeof(NE_HASH));
- if (my_hash == NULL)
- return nerr_raise(NERR_NOMEM, "Unable to allocate memory for NE_HASH");
-
- my_hash->size = 256;
- my_hash->num = 0;
- my_hash->hash_func = hash_func;
- my_hash->comp_func = comp_func;
-
- my_hash->nodes = (NE_HASHNODE **) calloc (my_hash->size, sizeof(NE_HASHNODE *));
- if (my_hash->nodes == NULL)
- {
- free(my_hash);
- return nerr_raise(NERR_NOMEM, "Unable to allocate memory for NE_HASHNODES");
- }
-
- *hash = my_hash;
-
- return STATUS_OK;
-}
-
-void ne_hash_destroy (NE_HASH **hash)
-{
- NE_HASH *my_hash;
- NE_HASHNODE *node, *next;
- int x;
-
- if (hash == NULL || *hash == NULL)
- return;
-
- my_hash = *hash;
-
- for (x = 0; x < my_hash->size; x++)
- {
- node = my_hash->nodes[x];
- while (node)
- {
- next = node->next;
- free(node);
- node = next;
- }
- }
- free(my_hash->nodes);
- my_hash->nodes = NULL;
- free(my_hash);
- *hash = NULL;
-}
-
-NEOERR *ne_hash_insert(NE_HASH *hash, void *key, void *value)
-{
- UINT32 hashv;
- NE_HASHNODE **node;
-
- node = _hash_lookup_node(hash, key, &hashv);
-
- if (*node)
- {
- (*node)->value = value;
- }
- else
- {
- *node = (NE_HASHNODE *) malloc(sizeof(NE_HASHNODE));
- if (node == NULL)
- return nerr_raise(NERR_NOMEM, "Unable to allocate NE_HASHNODE");
-
- (*node)->hashv = hashv;
- (*node)->key = key;
- (*node)->value = value;
- (*node)->next = NULL;
- }
- hash->num++;
-
- return _hash_resize(hash);
-}
-
-void *ne_hash_lookup(NE_HASH *hash, void *key)
-{
- NE_HASHNODE *node;
-
- node = *_hash_lookup_node(hash, key, NULL);
-
- return (node) ? node->value : NULL;
-}
-
-void *ne_hash_remove(NE_HASH *hash, void *key)
-{
- NE_HASHNODE **node, *remove;
- void *value = NULL;
-
- node = _hash_lookup_node(hash, key, NULL);
- if (*node)
- {
- remove = *node;
- *node = remove->next;
- value = remove->value;
- free(remove);
- hash->num--;
- }
- return value;
-}
-
-int ne_hash_has_key(NE_HASH *hash, void *key)
-{
- NE_HASHNODE *node;
-
- node = *_hash_lookup_node(hash, key, NULL);
-
- if (node) return 1;
- return 0;
-}
-
-void *ne_hash_next(NE_HASH *hash, void **key)
-{
- NE_HASHNODE **node = 0;
- UINT32 hashv, bucket;
-
- if (*key)
- {
- node = _hash_lookup_node(hash, key, NULL);
-
- if (*node)
- {
- bucket = (*node)->hashv & (hash->size - 1);
- }
- else
- {
- hashv = hash->hash_func(*key);
- bucket = hashv & (hash->size - 1);
- }
- }
- else
- {
- bucket = 0;
- }
-
- if (*node)
- {
- if ((*node)->next)
- {
- *key = (*node)->next->key;
- return (*node)->next->value;
- }
- bucket++;
- }
-
- while (bucket < hash->size)
- {
- if (hash->nodes[bucket])
- {
- *key = hash->nodes[bucket]->key;
- return hash->nodes[bucket]->value;
- }
- bucket++;
- }
-
- return NULL;
-}
-
-static NE_HASHNODE **_hash_lookup_node (NE_HASH *hash, void *key, UINT32 *o_hashv)
-{
- UINT32 hashv, bucket;
- NE_HASHNODE **node;
-
- hashv = hash->hash_func(key);
- if (o_hashv) *o_hashv = hashv;
- bucket = hashv & (hash->size - 1);
- /* ne_warn("Lookup %s %d %d", key, hashv, bucket); */
-
- node = &(hash->nodes[bucket]);
-
- if (hash->comp_func)
- {
- while (*node && !(hash->comp_func((*node)->key, key)))
- node = &(*node)->next;
- }
- else
- {
- /* No comp_func means we're doing pointer comparisons */
- while (*node && (*node)->key != key)
- node = &(*node)->next;
- }
-
- /* ne_warn("Node %x", node); */
- return node;
-}
-
-/* Ok, we're doing some weirdness here... */
-static NEOERR *_hash_resize(NE_HASH *hash)
-{
- NE_HASHNODE **new_nodes;
- NE_HASHNODE *entry, *prev;
- int x, next_bucket;
- int orig_size = hash->size;
- UINT32 hash_mask;
-
- if (hash->size > hash->num)
- return STATUS_OK;
-
- /* We always double in size */
- new_nodes = (NE_HASHNODE **) realloc (hash->nodes, (hash->size*2) * sizeof(NE_HASHNODE));
- if (new_nodes == NULL)
- return nerr_raise(NERR_NOMEM, "Unable to allocate memory to resize NE_HASH");
-
- hash->nodes = new_nodes;
- orig_size = hash->size;
- hash->size = hash->size*2;
-
- /* Initialize new parts */
- for (x = orig_size; x < hash->size; x++)
- {
- hash->nodes[x] = NULL;
- }
-
- hash_mask = hash->size - 1;
-
- for (x = 0; x < orig_size; x++)
- {
- prev = NULL;
- next_bucket = x + orig_size;
- for (entry = hash->nodes[x];
- entry;
- entry = prev ? prev->next : hash->nodes[x])
- {
- if ((entry->hashv & hash_mask) != x)
- {
- if (prev)
- {
- prev->next = entry->next;
- }
- else
- {
- hash->nodes[x] = entry->next;
- }
- entry->next = hash->nodes[next_bucket];
- hash->nodes[next_bucket] = entry;
- }
- else
- {
- prev = entry;
- }
- }
- }
-
- return STATUS_OK;
-}
-
-int ne_hash_str_comp(const void *a, const void *b)
-{
- return !strcmp((const char *)a, (const char *)b);
-}
-
-UINT32 ne_hash_str_hash(const void *a)
-{
- return ne_crc((unsigned char *)a, strlen((const char *)a));
-}
-
-int ne_hash_int_comp(const void *a, const void *b)
-{
- if (a == b) return 1;
- return 0;
-}
-
-UINT32 ne_hash_int_hash(const void *a)
-{
- return (UINT32)(long)(a);
-}
diff --git a/util/neo_hash.h b/util/neo_hash.h
deleted file mode 100644
index 7d8d329..0000000
--- a/util/neo_hash.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#ifndef __NEO_HASH_H_
-#define __NEO_HASH_H_ 1
-
-__BEGIN_DECLS
-
-#include <stdlib.h>
-#include "util/neo_misc.h"
-
-typedef UINT32 (*NE_HASH_FUNC)(const void *);
-typedef int (*NE_COMP_FUNC)(const void *, const void *);
-
-typedef struct _NE_HASHNODE
-{
- void *key;
- void *value;
- UINT32 hashv;
- struct _NE_HASHNODE *next;
-} NE_HASHNODE;
-
-typedef struct _HASH
-{
- UINT32 size;
- UINT32 num;
-
- NE_HASHNODE **nodes;
- NE_HASH_FUNC hash_func;
- NE_COMP_FUNC comp_func;
-} NE_HASH;
-
-NEOERR *ne_hash_init (NE_HASH **hash, NE_HASH_FUNC hash_func, NE_COMP_FUNC comp_func);
-void ne_hash_destroy (NE_HASH **hash);
-NEOERR *ne_hash_insert(NE_HASH *hash, void *key, void *value);
-void *ne_hash_lookup(NE_HASH *hash, void *key);
-int ne_hash_has_key(NE_HASH *hash, void *key);
-void *ne_hash_remove(NE_HASH *hash, void *key);
-void *ne_hash_next(NE_HASH *hash, void **key);
-
-int ne_hash_str_comp(const void *a, const void *b);
-UINT32 ne_hash_str_hash(const void *a);
-
-int ne_hash_int_comp(const void *a, const void *b);
-UINT32 ne_hash_int_hash(const void *a);
-
-__END_DECLS
-
-#endif /* __NEO_HASH_H_ */
diff --git a/util/neo_hdf.c b/util/neo_hdf.c
deleted file mode 100644
index c31c60f..0000000
--- a/util/neo_hdf.c
+++ /dev/null
@@ -1,1867 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#include "cs_config.h"
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <errno.h>
-#include <limits.h>
-#include <stdarg.h>
-#include <sys/stat.h>
-#include "neo_misc.h"
-#include "neo_err.h"
-#include "neo_rand.h"
-#include "neo_hdf.h"
-#include "neo_str.h"
-#include "neo_files.h"
-#include "ulist.h"
-
-/* Ok, in order to use the hash, we have to support n-len strings
- * instead of null terminated strings (since in set_value and walk_hdf
- * we are merely using part of the HDF name for lookup, and that might
- * be a const, and we don't want the overhead of allocating/copying
- * that data out...)
- *
- * Since HASH doesn't maintain any data placed in it, merely pointers to
- * it, we use the HDF node itself as the key, and have specific
- * comp/hash functions which just use the name/name_len as the key.
- */
-
-static int hash_hdf_comp(const void *a, const void *b)
-{
- HDF *ha = (HDF *)a;
- HDF *hb = (HDF *)b;
-
- return (ha->name_len == hb->name_len) && !strncmp(ha->name, hb->name, ha->name_len);
-}
-
-static UINT32 hash_hdf_hash(const void *a)
-{
- HDF *ha = (HDF *)a;
- return ne_crc((UINT8 *)(ha->name), ha->name_len);
-}
-
-static NEOERR *_alloc_hdf (HDF **hdf, const char *name, size_t nlen,
- const char *value, int dup, int wf, HDF *top)
-{
- *hdf = calloc (1, sizeof (HDF));
- if (*hdf == NULL)
- {
- return nerr_raise (NERR_NOMEM, "Unable to allocate memory for hdf element");
- }
-
- (*hdf)->top = top;
-
- if (name != NULL)
- {
- (*hdf)->name_len = nlen;
- (*hdf)->name = (char *) malloc (nlen + 1);
- if ((*hdf)->name == NULL)
- {
- free((*hdf));
- (*hdf) = NULL;
- return nerr_raise (NERR_NOMEM,
- "Unable to allocate memory for hdf element: %s", name);
- }
- strncpy((*hdf)->name, name, nlen);
- (*hdf)->name[nlen] = '\0';
- }
- if (value != NULL)
- {
- if (dup)
- {
- (*hdf)->alloc_value = 1;
- (*hdf)->value = strdup(value);
- if ((*hdf)->value == NULL)
- {
- free((*hdf)->name);
- free((*hdf));
- (*hdf) = NULL;
- return nerr_raise (NERR_NOMEM,
- "Unable to allocate memory for hdf element %s", name);
- }
- }
- else
- {
- (*hdf)->alloc_value = wf;
- /* We're overriding the const of value here for the set_buf case
- * where we overrode the char * to const char * earlier, since
- * alloc_value actually keeps track of the const-ness for us */
- (*hdf)->value = (char *)value;
- }
- }
- return STATUS_OK;
-}
-
-static void _dealloc_hdf_attr(HDF_ATTR **attr)
-{
- HDF_ATTR *next;
-
- while ((*attr) != NULL)
- {
- next = (*attr)->next;
- if ((*attr)->key) free((*attr)->key);
- if ((*attr)->value) free((*attr)->value);
- free(*attr);
- *attr = next;
- }
- *attr = NULL;
-}
-
-static void _dealloc_hdf (HDF **hdf)
-{
- HDF *myhdf = *hdf;
- HDF *next = NULL;
-
- if (myhdf == NULL) return;
- if (myhdf->child != NULL)
- _dealloc_hdf(&(myhdf->child));
-
- /* This was easier recursively, but dangerous on long lists, so we
- * walk it ourselves */
- next = myhdf->next;
- while (next != NULL)
- {
- myhdf->next = next->next;
- next->next = NULL;
- _dealloc_hdf(&next);
- next = myhdf->next;
- }
- if (myhdf->name != NULL)
- {
- free (myhdf->name);
- myhdf->name = NULL;
- }
- if (myhdf->value != NULL)
- {
- if (myhdf->alloc_value)
- free (myhdf->value);
- myhdf->value = NULL;
- }
- if (myhdf->attr != NULL)
- {
- _dealloc_hdf_attr(&(myhdf->attr));
- }
- if (myhdf->hash != NULL)
- {
- ne_hash_destroy(&myhdf->hash);
- }
- free(myhdf);
- *hdf = NULL;
-}
-
-NEOERR* hdf_init (HDF **hdf)
-{
- NEOERR *err;
- HDF *my_hdf;
-
- *hdf = NULL;
-
- err = nerr_init();
- if (err != STATUS_OK)
- return nerr_pass (err);
-
- err = _alloc_hdf (&my_hdf, NULL, 0, NULL, 0, 0, NULL);
- if (err != STATUS_OK)
- return nerr_pass (err);
-
- my_hdf->top = my_hdf;
-
- *hdf = my_hdf;
-
- return STATUS_OK;
-}
-
-void hdf_destroy (HDF **hdf)
-{
- if (*hdf == NULL) return;
- if ((*hdf)->top == (*hdf))
- {
- _dealloc_hdf(hdf);
- }
-}
-
-static int _walk_hdf (HDF *hdf, const char *name, HDF **node)
-{
- HDF *parent = NULL;
- HDF *hp = hdf;
- HDF hash_key;
- int x = 0;
- const char *s, *n;
- int r;
-
- *node = NULL;
-
- if (hdf == NULL) return -1;
- if (name == NULL || name[0] == '\0')
- {
- *node = hdf;
- return 0;
- }
-
- if (hdf->link)
- {
- r = _walk_hdf (hdf->top, hdf->value, &hp);
- if (r) return r;
- if (hp)
- {
- parent = hp;
- hp = hp->child;
- }
- }
- else
- {
- parent = hdf;
- hp = hdf->child;
- }
- if (hp == NULL)
- {
- return -1;
- }
-
- n = name;
- s = strchr (n, '.');
- x = (s == NULL) ? strlen(n) : s - n;
-
- while (1)
- {
- if (parent && parent->hash)
- {
- hash_key.name = (char *)n;
- hash_key.name_len = x;
- hp = ne_hash_lookup(parent->hash, &hash_key);
- }
- else
- {
- while (hp != NULL)
- {
- if (hp->name && (x == hp->name_len) && !strncmp(hp->name, n, x))
- {
- break;
- }
- else
- {
- hp = hp->next;
- }
- }
- }
- if (hp == NULL)
- {
- return -1;
- }
- if (s == NULL) break;
-
- if (hp->link)
- {
- r = _walk_hdf (hp->top, hp->value, &hp);
- if (r) {
- return r;
- }
- parent = hp;
- hp = hp->child;
- }
- else
- {
- parent = hp;
- hp = hp->child;
- }
- n = s + 1;
- s = strchr (n, '.');
- x = (s == NULL) ? strlen(n) : s - n;
- }
- if (hp->link)
- {
- return _walk_hdf (hp->top, hp->value, node);
- }
-
- *node = hp;
- return 0;
-}
-
-int hdf_get_int_value (HDF *hdf, const char *name, int defval)
-{
- HDF *node;
- int v;
- char *n;
-
- if ((_walk_hdf(hdf, name, &node) == 0) && (node->value != NULL))
- {
- v = strtol (node->value, &n, 10);
- if (node->value == n) v = defval;
- return v;
- }
- return defval;
-}
-
-/* This should return a const char *, but changing this would have big
- * repurcussions for any C code using this function, so no change for now */
-char* hdf_get_value (HDF *hdf, const char *name, const char *defval)
-{
- HDF *node;
-
- if ((_walk_hdf(hdf, name, &node) == 0) && (node->value != NULL))
- {
- return node->value;
- }
- return (char *)defval;
-}
-
-char* hdf_get_valuevf (HDF *hdf, const char *namefmt, va_list ap)
-{
- HDF *node;
- char *name;
-
- name = vsprintf_alloc(namefmt, ap);
- if (name == NULL) return NULL;
- if ((_walk_hdf(hdf, name, &node) == 0) && (node->value != NULL))
- {
- free(name);
- return node->value;
- }
- free(name);
- return NULL;
-}
-
-char* hdf_get_valuef (HDF *hdf, const char *namefmt, ...)
-{
- char *val;
- va_list ap;
-
- va_start(ap, namefmt);
- val = hdf_get_valuevf(hdf, namefmt, ap);
- va_end(ap);
- return val;
-}
-
-NEOERR* hdf_get_copy (HDF *hdf, const char *name, char **value,
- const char *defval)
-{
- HDF *node;
-
- if ((_walk_hdf(hdf, name, &node) == 0) && (node->value != NULL))
- {
- *value = strdup(node->value);
- if (*value == NULL)
- {
- return nerr_raise (NERR_NOMEM, "Unable to allocate copy of %s", name);
- }
- }
- else
- {
- if (defval == NULL)
- *value = NULL;
- else
- {
- *value = strdup(defval);
- if (*value == NULL)
- {
- return nerr_raise (NERR_NOMEM, "Unable to allocate copy of %s", name);
- }
- }
- }
- return STATUS_OK;
-}
-
-HDF* hdf_get_obj (HDF *hdf, const char *name)
-{
- HDF *obj;
-
- _walk_hdf(hdf, name, &obj);
- return obj;
-}
-
-HDF* hdf_get_child (HDF *hdf, const char *name)
-{
- HDF *obj;
- _walk_hdf(hdf, name, &obj);
- if (obj != NULL) return obj->child;
- return obj;
-}
-
-HDF_ATTR* hdf_get_attr (HDF *hdf, const char *name)
-{
- HDF *obj;
- _walk_hdf(hdf, name, &obj);
- if (obj != NULL) return obj->attr;
- return NULL;
-}
-
-NEOERR* hdf_set_attr (HDF *hdf, const char *name, const char *key,
- const char *value)
-{
- HDF *obj;
- HDF_ATTR *attr, *last;
-
- _walk_hdf(hdf, name, &obj);
- if (obj == NULL)
- return nerr_raise(NERR_ASSERT, "Unable to set attribute on none existant node");
-
- if (obj->attr != NULL)
- {
- attr = obj->attr;
- last = attr;
- while (attr != NULL)
- {
- if (!strcmp(attr->key, key))
- {
- if (attr->value) free(attr->value);
- /* a set of NULL deletes the attr */
- if (value == NULL)
- {
- if (attr == obj->attr)
- obj->attr = attr->next;
- else
- last->next = attr->next;
- free(attr->key);
- free(attr);
- return STATUS_OK;
- }
- attr->value = strdup(value);
- if (attr->value == NULL)
- return nerr_raise(NERR_NOMEM, "Unable to set attr %s to %s", key, value);
- return STATUS_OK;
- }
- last = attr;
- attr = attr->next;
- }
- last->next = (HDF_ATTR *) calloc(1, sizeof(HDF_ATTR));
- if (last->next == NULL)
- return nerr_raise(NERR_NOMEM, "Unable to set attr %s to %s", key, value);
- attr = last->next;
- }
- else
- {
- if (value == NULL) return STATUS_OK;
- obj->attr = (HDF_ATTR *) calloc(1, sizeof(HDF_ATTR));
- if (obj->attr == NULL)
- return nerr_raise(NERR_NOMEM, "Unable to set attr %s to %s", key, value);
- attr = obj->attr;
- }
- attr->key = strdup(key);
- attr->value = strdup(value);
- if (attr->key == NULL || attr->value == NULL)
- return nerr_raise(NERR_NOMEM, "Unable to set attr %s to %s", key, value);
-
- return STATUS_OK;
-}
-
-HDF* hdf_obj_child (HDF *hdf)
-{
- HDF *obj;
- if (hdf == NULL) return NULL;
- if (hdf->link)
- {
- if (_walk_hdf(hdf->top, hdf->value, &obj))
- return NULL;
- return obj->child;
- }
- return hdf->child;
-}
-
-HDF* hdf_obj_next (HDF *hdf)
-{
- if (hdf == NULL) return NULL;
- return hdf->next;
-}
-
-HDF* hdf_obj_top (HDF *hdf)
-{
- if (hdf == NULL) return NULL;
- return hdf->top;
-}
-
-HDF_ATTR* hdf_obj_attr (HDF *hdf)
-{
- if (hdf == NULL) return NULL;
- return hdf->attr;
-}
-
-char* hdf_obj_name (HDF *hdf)
-{
- if (hdf == NULL) return NULL;
- return hdf->name;
-}
-
-char* hdf_obj_value (HDF *hdf)
-{
- int count = 0;
-
- if (hdf == NULL) return NULL;
- while (hdf->link && count < 100)
- {
- if (_walk_hdf (hdf->top, hdf->value, &hdf))
- return NULL;
- count++;
- }
- return hdf->value;
-}
-
-void _merge_attr (HDF_ATTR *dest, HDF_ATTR *src)
-{
- HDF_ATTR *da, *ld;
- HDF_ATTR *sa, *ls;
- BOOL found;
-
- sa = src;
- ls = src;
- while (sa != NULL)
- {
- da = dest;
- ld = da;
- found = 0;
- while (da != NULL)
- {
- if (!strcmp(da->key, sa->key))
- {
- if (da->value) free(da->value);
- da->value = sa->value;
- sa->value = NULL;
- found = 1;
- break;
- }
- ld = da;
- da = da->next;
- }
- if (!found)
- {
- ld->next = sa;
- ls->next = sa->next;
- if (src == sa) src = sa->next;
- ld->next->next = NULL;
- sa = ls->next;
- }
- else
- {
- ls = sa;
- sa = sa->next;
- }
- }
- _dealloc_hdf_attr(&src);
-}
-
-NEOERR* _hdf_hash_level(HDF *hdf)
-{
- NEOERR *err;
- HDF *child;
-
- err = ne_hash_init(&(hdf->hash), hash_hdf_hash, hash_hdf_comp);
- if (err) return nerr_pass(err);
-
- child = hdf->child;
- while (child)
- {
- err = ne_hash_insert(hdf->hash, child, child);
- if (err) return nerr_pass(err);
- child = child->next;
- }
- return STATUS_OK;
-}
-
-static NEOERR* _set_value (HDF *hdf, const char *name, const char *value,
- int dup, int wf, int link, HDF_ATTR *attr,
- HDF **set_node)
-{
- NEOERR *err;
- HDF *hn, *hp, *hs;
- HDF hash_key;
- int x = 0;
- const char *s = name;
- const char *n = name;
- int count = 0;
-
- if (set_node != NULL) *set_node = NULL;
- if (hdf == NULL)
- {
- return nerr_raise(NERR_ASSERT, "Unable to set %s on NULL hdf", name);
- }
-
- /* HACK: allow setting of this node by passing an empty name */
- if (name == NULL || name[0] == '\0')
- {
- /* handle setting attr first */
- if (hdf->attr == NULL)
- {
- hdf->attr = attr;
- }
- else
- {
- _merge_attr(hdf->attr, attr);
- }
- /* if we're setting ourselves to ourselves... */
- if (hdf->value == value)
- {
- if (set_node != NULL) *set_node = hdf;
- return STATUS_OK;
- }
- if (hdf->alloc_value)
- {
- free(hdf->value);
- hdf->value = NULL;
- }
- if (value == NULL)
- {
- hdf->alloc_value = 0;
- hdf->value = NULL;
- }
- else if (dup)
- {
- hdf->alloc_value = 1;
- hdf->value = strdup(value);
- if (hdf->value == NULL)
- return nerr_raise (NERR_NOMEM, "Unable to duplicate value %s for %s",
- value, name);
- }
- else
- {
- hdf->alloc_value = wf;
- hdf->value = (char *)value;
- }
- if (set_node != NULL) *set_node = hdf;
- return STATUS_OK;
- }
-
- n = name;
- s = strchr (n, '.');
- x = (s != NULL) ? s - n : strlen(n);
- if (x == 0)
- {
- return nerr_raise(NERR_ASSERT, "Unable to set Empty component %s", name);
- }
-
- if (hdf->link)
- {
- char *new_name = (char *) malloc(strlen(hdf->value) + 1 + strlen(name) + 1);
- if (new_name == NULL)
- {
- return nerr_raise(NERR_NOMEM, "Unable to allocate memory");
- }
- strcpy(new_name, hdf->value);
- strcat(new_name, ".");
- strcat(new_name, name);
- err = _set_value (hdf->top, new_name, value, dup, wf, link, attr, set_node);
- free(new_name);
- return nerr_pass(err);
- }
- else
- {
- hn = hdf;
- }
-
- while (1)
- {
- /* examine cache to see if we have a match */
- count = 0;
- hp = hn->last_hp;
- hs = hn->last_hs;
-
- if ((hs == NULL && hp == hn->child) || (hs && hs->next == hp))
- {
- if (hp && hp->name && (x == hp->name_len) && !strncmp (hp->name, n, x))
- {
- goto skip_search;
- }
- }
-
- hp = hn->child;
- hs = NULL;
-
- /* Look for a matching node at this level */
- if (hn->hash != NULL)
- {
- hash_key.name = (char *)n;
- hash_key.name_len = x;
- hp = ne_hash_lookup(hn->hash, &hash_key);
- hs = hn->last_child;
- }
- else
- {
- while (hp != NULL)
- {
- if (hp->name && (x == hp->name_len) && !strncmp(hp->name, n, x))
- {
- break;
- }
- hs = hp;
- hp = hp->next;
- count++;
- }
- }
-
- /* save in cache any value we found */
- if (hp) {
- hn->last_hp = hp;
- hn->last_hs = hs;
- }
-
-skip_search:
-
- if (hp == NULL)
- {
- /* If there was no matching node at this level, we need to
- * allocate an intersitial node (or the actual node if we're
- * at the last part of the HDF name) */
- if (s != NULL)
- {
- /* intersitial */
- err = _alloc_hdf (&hp, n, x, NULL, 0, 0, hdf->top);
- }
- else
- {
- err = _alloc_hdf (&hp, n, x, value, dup, wf, hdf->top);
- if (link) hp->link = 1;
- else hp->link = 0;
- hp->attr = attr;
- }
- if (err != STATUS_OK)
- return nerr_pass (err);
- if (hn->child == NULL)
- hn->child = hp;
- else
- hs->next = hp;
- hn->last_child = hp;
-
- /* This is the point at which we convert to a hash table
- * at this level, if we're over the count */
- if (count > FORCE_HASH_AT && hn->hash == NULL)
- {
- err = _hdf_hash_level(hn);
- if (err) return nerr_pass(err);
- }
- else if (hn->hash != NULL)
- {
- err = ne_hash_insert(hn->hash, hp, hp);
- if (err) return nerr_pass(err);
- }
- }
- else if (s == NULL)
- {
- /* If there is a matching node and we're at the end of the HDF
- * name, then we update the value of the node */
- /* handle setting attr first */
- if (hp->attr == NULL)
- {
- hp->attr = attr;
- }
- else
- {
- _merge_attr(hp->attr, attr);
- }
- if (hp->value != value)
- {
- if (hp->alloc_value)
- {
- free(hp->value);
- hp->value = NULL;
- }
- if (value == NULL)
- {
- hp->alloc_value = 0;
- hp->value = NULL;
- }
- else if (dup)
- {
- hp->alloc_value = 1;
- hp->value = strdup(value);
- if (hp->value == NULL)
- return nerr_raise (NERR_NOMEM, "Unable to duplicate value %s for %s",
- value, name);
- }
- else
- {
- hp->alloc_value = wf;
- hp->value = (char *)value;
- }
- }
- if (link) hp->link = 1;
- else hp->link = 0;
- }
- else if (hp->link)
- {
- char *new_name = (char *) malloc(strlen(hp->value) + strlen(s) + 1);
- if (new_name == NULL)
- {
- return nerr_raise(NERR_NOMEM, "Unable to allocate memory");
- }
- strcpy(new_name, hp->value);
- strcat(new_name, s);
- err = _set_value (hdf->top, new_name, value, dup, wf, link, attr, set_node);
- free(new_name);
- return nerr_pass(err);
- }
- /* At this point, we're done if there is not more HDF name space to
- * traverse */
- if (s == NULL)
- break;
- /* Otherwise, we need to find the next part of the namespace */
- n = s + 1;
- s = strchr (n, '.');
- x = (s != NULL) ? s - n : strlen(n);
- if (x == 0)
- {
- return nerr_raise(NERR_ASSERT, "Unable to set Empty component %s", name);
- }
- hn = hp;
- }
- if (set_node != NULL) *set_node = hp;
- return STATUS_OK;
-}
-
-NEOERR* hdf_set_value (HDF *hdf, const char *name, const char *value)
-{
- return nerr_pass(_set_value (hdf, name, value, 1, 1, 0, NULL, NULL));
-}
-
-NEOERR* hdf_set_value_attr (HDF *hdf, const char *name, const char *value,
- HDF_ATTR *attr)
-{
- return nerr_pass(_set_value (hdf, name, value, 1, 1, 0, attr, NULL));
-}
-
-NEOERR* hdf_set_symlink (HDF *hdf, const char *src, const char *dest)
-{
- return nerr_pass(_set_value (hdf, src, dest, 1, 1, 1, NULL, NULL));
-}
-
-NEOERR* hdf_set_int_value (HDF *hdf, const char *name, int value)
-{
- char buf[256];
-
- snprintf (buf, sizeof(buf), "%d", value);
- return nerr_pass(_set_value (hdf, name, buf, 1, 1, 0, NULL, NULL));
-}
-
-NEOERR* hdf_set_buf (HDF *hdf, const char *name, char *value)
-{
- return nerr_pass(_set_value (hdf, name, value, 0, 1, 0, NULL, NULL));
-}
-
-NEOERR* hdf_set_copy (HDF *hdf, const char *dest, const char *src)
-{
- HDF *node;
- if ((_walk_hdf(hdf, src, &node) == 0) && (node->value != NULL))
- {
- return nerr_pass(_set_value (hdf, dest, node->value, 0, 0, 0, NULL, NULL));
- }
- return nerr_raise (NERR_NOT_FOUND, "Unable to find %s", src);
-}
-
-NEOERR* hdf_set_valuevf (HDF *hdf, const char *fmt, va_list ap)
-{
- NEOERR *err;
- char *k;
- char *v;
-
- k = vsprintf_alloc(fmt, ap);
- if (k == NULL)
- {
- return nerr_raise(NERR_NOMEM, "Unable to allocate memory for format string");
- }
- v = strchr(k, '=');
- if (v == NULL)
- {
- err = nerr_raise(NERR_ASSERT, "No equals found: %s", k);
- free(k);
- return err;
- }
- *v++ = '\0';
- err = hdf_set_value(hdf, k, v);
- free(k);
- return nerr_pass(err);
-}
-
-NEOERR* hdf_set_valuef (HDF *hdf, const char *fmt, ...)
-{
- NEOERR *err;
- va_list ap;
-
- va_start(ap, fmt);
- err = hdf_set_valuevf(hdf, fmt, ap);
- va_end(ap);
- return nerr_pass(err);
-}
-
-NEOERR* hdf_get_node (HDF *hdf, const char *name, HDF **ret)
-{
- _walk_hdf(hdf, name, ret);
- if (*ret == NULL)
- {
- return nerr_pass(_set_value (hdf, name, NULL, 0, 1, 0, NULL, ret));
- }
- return STATUS_OK;
-}
-
-/* Ok, this version avoids the bubble sort by walking the level once to
- * load them all into a ULIST, qsort'ing the list, and then dumping them
- * back out... */
-NEOERR *hdf_sort_obj (HDF *h, int (*compareFunc)(const void *, const void *))
-{
- NEOERR *err = STATUS_OK;
- ULIST *level = NULL;
- HDF *p, *c;
- int x;
-
- if (h == NULL) return STATUS_OK;
- c = h->child;
- if (c == NULL) return STATUS_OK;
-
- do {
- err = uListInit(&level, 40, 0);
- if (err) return nerr_pass(err);
- for (p = c; p; p = p->next) {
- err = uListAppend(level, p);
- if (err) break;
- }
- err = uListSort(level, compareFunc);
- if (err) break;
- uListGet(level, 0, (void *)&c);
- h->child = c;
- for (x = 1; x < uListLength(level); x++)
- {
- uListGet(level, x, (void *)&p);
- c->next = p;
- p->next = NULL;
- c = p;
- }
- h->last_child = c;
- } while (0);
- uListDestroy(&level, 0);
- return nerr_pass(err);
-}
-
-NEOERR* hdf_remove_tree (HDF *hdf, const char *name)
-{
- HDF *hp = hdf;
- HDF *lp = NULL, *ln = NULL; /* last parent, last node */
- int x = 0;
- const char *s = name;
- const char *n = name;
-
- if (hdf == NULL) return STATUS_OK;
-
- hp = hdf->child;
- if (hp == NULL)
- {
- return STATUS_OK;
- }
-
- lp = hdf;
- ln = NULL;
-
- n = name;
- s = strchr (n, '.');
- x = (s == NULL) ? strlen(n) : s - n;
-
- while (1)
- {
- while (hp != NULL)
- {
- if (hp->name && (x == hp->name_len) && !strncmp(hp->name, n, x))
- {
- break;
- }
- else
- {
- ln = hp;
- hp = hp->next;
- }
- }
- if (hp == NULL)
- {
- return STATUS_OK;
- }
- if (s == NULL) break;
-
- lp = hp;
- ln = NULL;
- hp = hp->child;
- n = s + 1;
- s = strchr (n, '.');
- x = (s == NULL) ? strlen(n) : s - n;
- }
-
- if (lp->hash != NULL)
- {
- ne_hash_remove(lp->hash, hp);
- }
- if (ln)
- {
- ln->next = hp->next;
- /* check to see if we are the last parent's last_child, if so
- * repoint so hash table inserts will go to the right place */
- if (hp == lp->last_child)
- lp->last_child = ln;
- hp->next = NULL;
- }
- else
- {
- lp->child = hp->next;
- hp->next = NULL;
- }
- _dealloc_hdf (&hp);
-
- return STATUS_OK;
-}
-
-static NEOERR * _copy_attr (HDF_ATTR **dest, HDF_ATTR *src)
-{
- HDF_ATTR *copy, *last = NULL;
-
- *dest = NULL;
- while (src != NULL)
- {
- copy = (HDF_ATTR *)malloc(sizeof(HDF_ATTR));
- if (copy == NULL)
- {
- _dealloc_hdf_attr(dest);
- return nerr_raise(NERR_NOMEM, "Unable to allocate copy of HDF_ATTR");
- }
- copy->key = strdup(src->key);
- copy->value = strdup(src->value);
- copy->next = NULL;
- if ((copy->key == NULL) || (copy->value == NULL))
- {
- _dealloc_hdf_attr(dest);
- return nerr_raise(NERR_NOMEM, "Unable to allocate copy of HDF_ATTR");
- }
- if (last) {
- last->next = copy;
- }
- else
- {
- *dest = copy;
- }
- last = copy;
- src = src->next;
- }
- return STATUS_OK;
-}
-
-static NEOERR * _copy_nodes (HDF *dest, HDF *src)
-{
- NEOERR *err = STATUS_OK;
- HDF *dt, *st;
- HDF_ATTR *attr_copy;
-
- st = src->child;
- while (st != NULL)
- {
- err = _copy_attr(&attr_copy, st->attr);
- if (err) return nerr_pass(err);
- err = _set_value(dest, st->name, st->value, 1, 1, 0, attr_copy, &dt);
- if (err) {
- _dealloc_hdf_attr(&attr_copy);
- return nerr_pass(err);
- }
- if (src->child)
- {
- err = _copy_nodes (dt, st);
- if (err) return nerr_pass(err);
- }
- st = st->next;
- }
- return STATUS_OK;
-}
-
-NEOERR* hdf_copy (HDF *dest, const char *name, HDF *src)
-{
- NEOERR *err;
- HDF *node;
-
- if (_walk_hdf(dest, name, &node) == -1)
- {
- err = _set_value (dest, name, NULL, 0, 0, 0, NULL, &node);
- if (err) return nerr_pass (err);
- }
- return nerr_pass (_copy_nodes (node, src));
-}
-
-/* BUG: currently, this only prints something if there is a value...
- * but we now allow attributes on nodes with no value... */
-
-static void gen_ml_break(char *ml, size_t len)
-{
- int nlen;
- int x = 0;
-
- ml[x++] = '\n';
- nlen = 2 + neo_rand(len-5);
- if (nlen == 0)
- {
- nlen = len / 2;
- }
- while (nlen)
- {
- ml[x++] = ('A' + neo_rand(26));
- nlen--;
- }
- ml[x++] = '\n';
- ml[x] = '\0';
-}
-
-typedef NEOERR *(*DUMPF_CB)(void *rock, const char *fmt, ...);
-
-static NEOERR *_fp_dump_cb (void *rock, const char *fmt, ...)
-{
- FILE *fp = (FILE *)rock;
- va_list ap;
-
- va_start (ap, fmt);
- vfprintf(fp, fmt, ap);
- va_end(ap);
- return STATUS_OK;
-}
-
-static NEOERR *_string_dump_cb (void *rock, const char *fmt, ...)
-{
- NEOERR *err;
- STRING *str = (STRING *)rock;
- va_list ap;
-
- va_start (ap, fmt);
- err = string_appendvf(str, fmt, ap);
- va_end(ap);
- return nerr_pass(err);
-}
-
-#define DUMP_TYPE_DOTTED 0
-#define DUMP_TYPE_COMPACT 1
-#define DUMP_TYPE_PRETTY 2
-
-static NEOERR* hdf_dump_cb(HDF *hdf, const char *prefix, int dtype, int lvl,
- void *rock, DUMPF_CB dump_cbf)
-{
- NEOERR *err;
- char *p, op;
- char ml[10] = "\nEOM\n";
- int ml_len = strlen(ml);
- char whsp[256] = "";
-
- if (dtype == DUMP_TYPE_PRETTY)
- {
- memset(whsp, ' ', 256);
- if (lvl > 127)
- lvl = 127;
- whsp[lvl*2] = '\0';
- }
-
- if (hdf != NULL) hdf = hdf->child;
-
- while (hdf != NULL)
- {
- op = '=';
- if (hdf->value)
- {
- if (hdf->link) op = ':';
- if (prefix && (dtype == DUMP_TYPE_DOTTED))
- {
- err = dump_cbf(rock, "%s.%s", prefix, hdf->name);
- }
- else
- {
- err = dump_cbf(rock, "%s%s", whsp, hdf->name);
- }
- if (err) return nerr_pass (err);
- if (hdf->attr)
- {
- HDF_ATTR *attr = hdf->attr;
- char *v = NULL;
-
- err = dump_cbf(rock, " [");
- if (err) return nerr_pass(err);
- while (attr != NULL)
- {
- if (attr->value == NULL || !strcmp(attr->value, "1"))
- err = dump_cbf(rock, "%s", attr->key);
- else
- {
- v = repr_string_alloc(attr->value);
-
- if (v == NULL)
- return nerr_raise(NERR_NOMEM, "Unable to repr attr %s value %s", attr->key, attr->value);
- err = dump_cbf(rock, "%s=%s", attr->key, v);
- free(v);
- }
- if (err) return nerr_pass(err);
- if (attr->next)
- {
- err = dump_cbf(rock, ", ");
- if (err) return nerr_pass(err);
- }
- attr = attr->next;
- }
- err = dump_cbf(rock, "] ");
- if (err) return nerr_pass(err);
- }
- if (strchr (hdf->value, '\n'))
- {
- int vlen = strlen(hdf->value);
-
- while (strstr(hdf->value, ml) || ((vlen > ml_len) && !strncmp(hdf->value + vlen - ml_len + 1, ml, strlen(ml) - 1)))
- {
- gen_ml_break(ml, sizeof(ml));
- ml_len = strlen(ml);
- }
- if (hdf->value[strlen(hdf->value)-1] != '\n')
- err = dump_cbf(rock, " << %s%s%s", ml+1, hdf->value, ml);
- else
- err = dump_cbf(rock, " << %s%s%s", ml+1, hdf->value, ml+1);
- }
- else
- {
- err = dump_cbf(rock, " %c %s\n", op, hdf->value);
- }
- if (err) return nerr_pass (err);
- }
- if (hdf->child)
- {
- if (prefix && (dtype == DUMP_TYPE_DOTTED))
- {
- p = (char *) malloc (strlen(hdf->name) + strlen(prefix) + 2);
- sprintf (p, "%s.%s", prefix, hdf->name);
- err = hdf_dump_cb (hdf, p, dtype, lvl+1, rock, dump_cbf);
- free(p);
- }
- else
- {
- if (hdf->name && (dtype != DUMP_TYPE_DOTTED))
- {
- err = dump_cbf(rock, "%s%s {\n", whsp, hdf->name);
- if (err) return nerr_pass (err);
- err = hdf_dump_cb (hdf, hdf->name, dtype, lvl+1, rock, dump_cbf);
- if (err) return nerr_pass (err);
- err = dump_cbf(rock, "%s}\n", whsp);
- }
- else
- {
- err = hdf_dump_cb (hdf, hdf->name, dtype, lvl+1, rock, dump_cbf);
- }
- }
- if (err) return nerr_pass (err);
- }
- hdf = hdf->next;
- }
- return STATUS_OK;
-}
-
-NEOERR* hdf_dump_str (HDF *hdf, const char *prefix, int dtype, STRING *str)
-{
- return nerr_pass(hdf_dump_cb(hdf, prefix, dtype, 0, str, _string_dump_cb));
-}
-
-NEOERR* hdf_dump(HDF *hdf, const char *prefix)
-{
- return nerr_pass(hdf_dump_cb(hdf, prefix, DUMP_TYPE_DOTTED, 0, stdout, _fp_dump_cb));
-}
-
-NEOERR* hdf_dump_format (HDF *hdf, int lvl, FILE *fp)
-{
- return nerr_pass(hdf_dump_cb(hdf, "", DUMP_TYPE_PRETTY, 0, fp, _fp_dump_cb));
-}
-
-NEOERR *hdf_write_file (HDF *hdf, const char *path)
-{
- NEOERR *err;
- FILE *fp;
-
- fp = fopen(path, "w");
- if (fp == NULL)
- return nerr_raise_errno (NERR_IO, "Unable to open %s for writing", path);
-
- err = hdf_dump_format (hdf, 0, fp);
-
- fclose (fp);
- if (err)
- {
- unlink(path);
- }
- return nerr_pass(err);
-}
-
-NEOERR *hdf_write_file_atomic (HDF *hdf, const char *path)
-{
- NEOERR *err;
- FILE *fp;
- char tpath[_POSIX_PATH_MAX];
- static int count = 0;
-
- snprintf(tpath, sizeof(tpath), "%s.%5.5f.%d", path, ne_timef(), count++);
-
- fp = fopen(tpath, "w");
- if (fp == NULL)
- return nerr_raise_errno (NERR_IO, "Unable to open %s for writing", tpath);
-
- err = hdf_dump_format (hdf, 0, fp);
-
- fclose (fp);
-
- if (err)
- {
- unlink(tpath);
- return nerr_pass(err);
- }
- if (rename(tpath, path) == -1)
- {
- unlink (tpath);
- return nerr_raise_errno (NERR_IO, "Unable to rename file %s to %s",
- tpath, path);
- }
-
- return STATUS_OK;
-}
-
-NEOERR *hdf_write_string (HDF *hdf, char **s)
-{
- STRING str;
- NEOERR *err;
-
- *s = NULL;
-
- string_init (&str);
-
- err = hdf_dump_str (hdf, NULL, 1, &str);
- if (err)
- {
- string_clear (&str);
- return nerr_pass(err);
- }
- if (str.buf == NULL)
- {
- *s = strdup("");
- if (*s == NULL) return nerr_raise(NERR_NOMEM, "Unable to allocate empty string");
- }
- else
- {
- *s = str.buf;
- }
-
- return STATUS_OK;
-}
-
-
-#define SKIPWS(s) while (*s && isspace(*s)) s++;
-
-static int _copy_line (const char **s, char *buf, size_t buf_len)
-{
- int x = 0;
- const char *st = *s;
-
- while (*st && x < buf_len-1)
- {
- buf[x++] = *st;
- if (*st++ == '\n') break;
- }
- buf[x] = '\0';
- *s = st;
-
- return x;
-}
-
-/* Copy the characters in the file (up to the next newline) into line
- * and advance s to the next line */
-static NEOERR *_copy_line_advance(const char **s, STRING *line)
-{
- NEOERR *err;
- int x = 0;
- const char *st = *s;
- const char *nl;
-
- nl = strchr(st, '\n');
- if (nl == NULL)
- {
- x = strlen(st);
- err = string_appendn(line, st, x);
- if (err) return nerr_pass(err);
- *s = st + x;
- }
- else
- {
- x = nl - st;
- err = string_appendn(line, st, x);
- if (err) return nerr_pass(err);
- *s = nl + 1;
- }
-
- return STATUS_OK;
-}
-
-char *_strndup(const char *s, int len) {
- int x;
- char *dup;
- if (s == NULL) return NULL;
- dup = (char *) malloc(len+1);
- if (dup == NULL) return NULL;
- for (x = 0; x < len && s[x]; x++)
- {
- dup[x] = s[x];
- }
- dup[x] = '\0';
- dup[len] = '\0';
- return dup;
-}
-
-/* attributes are of the form [key1, key2, key3=value, key4="repr"] */
-static NEOERR* parse_attr(char **str, HDF_ATTR **attr)
-{
- NEOERR *err = STATUS_OK;
- char *s = *str;
- char *k, *v;
- int k_l, v_l;
- STRING buf;
- char c;
- HDF_ATTR *ha, *hal = NULL;
-
- *attr = NULL;
-
- string_init(&buf);
- while (*s && *s != ']')
- {
- k = s;
- k_l = 0;
- v = NULL;
- v_l = 0;
- while (*s && isalnum(*s)) s++;
- k_l = s-k;
- if (*s == '\0' || k_l == 0)
- {
- _dealloc_hdf_attr(attr);
- return nerr_raise(NERR_PARSE, "Misformed attribute specification: %s", *str);
- }
- SKIPWS(s);
- if (*s == '=')
- {
- s++;
- SKIPWS(s);
- if (*s == '"')
- {
- s++;
- while (*s && *s != '"')
- {
- if (*s == '\\')
- {
- if (isdigit(*(s+1)))
- {
- s++;
- c = *s - '0';
- if (isdigit(*(s+1)))
- {
- s++;
- c = (c * 8) + (*s - '0');
- if (isdigit(*(s+1)))
- {
- s++;
- c = (c * 8) + (*s - '0');
- }
- }
- }
- else
- {
- s++;
- if (*s == 'n') c = '\n';
- else if (*s == 't') c = '\t';
- else if (*s == 'r') c = '\r';
- else c = *s;
- }
- err = string_append_char(&buf, c);
- }
- else
- {
- err = string_append_char(&buf, *s);
- }
- if (err)
- {
- string_clear(&buf);
- _dealloc_hdf_attr(attr);
- return nerr_pass(err);
- }
- s++;
- }
- if (*s == '\0')
- {
- _dealloc_hdf_attr(attr);
- string_clear(&buf);
- return nerr_raise(NERR_PARSE, "Misformed attribute specification: %s", *str);
- }
- s++;
- v = buf.buf;
- v_l = buf.len;
- }
- else
- {
- v = s;
- while (*s && *s != ' ' && *s != ',' && *s != ']') s++;
- if (*s == '\0')
- {
- _dealloc_hdf_attr(attr);
- return nerr_raise(NERR_PARSE, "Misformed attribute specification: %s", *str);
- }
- v_l = s-v;
- }
- }
- else
- {
- v = "1";
- }
- ha = (HDF_ATTR*) calloc (1, sizeof(HDF_ATTR));
- if (ha == NULL)
- {
- _dealloc_hdf_attr(attr);
- string_clear(&buf);
- return nerr_raise(NERR_NOMEM, "Unable to load attributes: %s", s);
- }
- if (*attr == NULL) *attr = ha;
- ha->key = _strndup(k, k_l);
- if (v)
- ha->value = _strndup(v, v_l);
- else
- ha->value = strdup("");
- if (ha->key == NULL || ha->value == NULL)
- {
- _dealloc_hdf_attr(attr);
- string_clear(&buf);
- return nerr_raise(NERR_NOMEM, "Unable to load attributes: %s", s);
- }
- if (hal != NULL) hal->next = ha;
- hal = ha;
- string_clear(&buf);
- SKIPWS(s);
- if (*s == ',')
- {
- s++;
- SKIPWS(s);
- }
- }
- if (*s == '\0')
- {
- _dealloc_hdf_attr(attr);
- return nerr_raise(NERR_PARSE, "Misformed attribute specification: %s", *str);
- }
- *str = s+1;
- return STATUS_OK;
-}
-
-#define INCLUDE_ERROR 0
-#define INCLUDE_IGNORE 1
-#define INCLUDE_FILE 2
-
-static NEOERR* _hdf_read_string (HDF *hdf, const char **str, STRING *line,
- const char *path, int *lineno, int include_handle)
-{
- NEOERR *err;
- HDF *lower;
- char *s;
- char *name, *value;
- HDF_ATTR *attr = NULL;
-
- while (**str != '\0')
- {
- /* Reset string length, but don't free the reserved buffer */
- line->len = 0;
- err = _copy_line_advance(str, line);
- if (err) return nerr_pass(err);
- attr = NULL;
- (*lineno)++;
- s = line->buf;
- SKIPWS(s);
- if (!strncmp(s, "#include ", 9))
- {
- if (include_handle == INCLUDE_ERROR)
- {
- return nerr_raise (NERR_PARSE,
- "[%d]: #include not supported in string parse",
- *lineno);
- }
- else if (include_handle == INCLUDE_FILE)
- {
- int l;
- s += 9;
- name = neos_strip(s);
- l = strlen(name);
- if (name[0] == '"' && name[l-1] == '"')
- {
- name[l-1] = '\0';
- name++;
- }
- err = hdf_read_file(hdf, name);
- if (err != STATUS_OK)
- {
- return nerr_pass_ctx(err, "In file %s:%d", path, *lineno);
- }
- }
- }
- else if (s[0] == '#')
- {
- /* comment: pass */
- }
- else if (s[0] == '}') /* up */
- {
- s = neos_strip(s);
- if (strcmp(s, "}"))
- {
- err = nerr_raise(NERR_PARSE,
- "[%s:%d] Trailing garbage on line following }: %s", path, *lineno,
- line->buf);
- return err;
- }
- return STATUS_OK;
- }
- else if (s[0])
- {
- /* Valid hdf name is [0-9a-zA-Z_.]+ */
- name = s;
- while (*s && (isalnum(*s) || *s == '_' || *s == '.')) s++;
- SKIPWS(s);
-
- if (s[0] == '[') /* attributes */
- {
- *s = '\0';
- name = neos_strip(name);
- s++;
- err = parse_attr(&s, &attr);
- if (err)
- {
- return nerr_pass_ctx(err, "In file %s:%d", path, *lineno);
- }
- SKIPWS(s);
- }
- if (s[0] == '=') /* assignment */
- {
- *s = '\0';
- name = neos_strip(name);
- s++;
- value = neos_strip(s);
- err = _set_value (hdf, name, value, 1, 1, 0, attr, NULL);
- if (err != STATUS_OK)
- {
- return nerr_pass_ctx(err, "In file %s:%d", path, *lineno);
- }
- }
- else if (s[0] == ':' && s[1] == '=') /* copy */
- {
- *s = '\0';
- name = neos_strip(name);
- s+=2;
- value = neos_strip(s);
- value = hdf_get_value(hdf->top, value, "");
- err = _set_value (hdf, name, value, 1, 1, 0, attr, NULL);
- if (err != STATUS_OK)
- {
- return nerr_pass_ctx(err, "In file %s:%d", path, *lineno);
- }
- }
- else if (s[0] == ':') /* link */
- {
- *s = '\0';
- name = neos_strip(name);
- s++;
- value = neos_strip(s);
- err = _set_value (hdf, name, value, 1, 1, 1, attr, NULL);
- if (err != STATUS_OK)
- {
- return nerr_pass_ctx(err, "In file %s:%d", path, *lineno);
- }
- }
- else if (s[0] == '{') /* deeper */
- {
- *s = '\0';
- name = neos_strip(name);
- lower = hdf_get_obj (hdf, name);
- if (lower == NULL)
- {
- err = _set_value (hdf, name, NULL, 1, 1, 0, attr, &lower);
- }
- else
- {
- err = _set_value (lower, NULL, lower->value, 1, 1, 0, attr, NULL);
- }
- if (err != STATUS_OK)
- {
- return nerr_pass_ctx(err, "In file %s:%d", path, *lineno);
- }
- err = _hdf_read_string (lower, str, line, path, lineno, include_handle);
- if (err != STATUS_OK)
- {
- return nerr_pass_ctx(err, "In file %s:%d", path, *lineno);
- }
- }
- else if (s[0] == '<' && s[1] == '<') /* multi-line assignment */
- {
- char *m;
- int msize = 0;
- int mmax = 128;
- int l;
-
- *s = '\0';
- name = neos_strip(name);
- s+=2;
- value = neos_strip(s);
- l = strlen(value);
- if (l == 0)
- {
- err = nerr_raise(NERR_PARSE,
- "[%s:%d] No multi-assignment terminator given: %s", path, *lineno,
- line->buf);
- return err;
- }
- m = (char *) malloc (mmax * sizeof(char));
- if (m == NULL)
- {
- return nerr_raise(NERR_NOMEM,
- "[%s:%d] Unable to allocate memory for multi-line assignment to %s",
- path, *lineno, name);
- }
- while (_copy_line (str, m+msize, mmax-msize) != 0)
- {
- (*lineno)++;
- if (!strncmp(value, m+msize, l) && isspace(m[msize+l]))
- {
- m[msize] = '\0';
- break;
- }
- msize += strlen(m+msize);
- if (msize + l + 10 > mmax)
- {
- mmax += 128;
- m = (char *) realloc (m, mmax * sizeof(char));
- if (m == NULL)
- {
- return nerr_raise(NERR_NOMEM,
- "[%s:%d] Unable to allocate memory for multi-line assignment to %s: size=%d",
- path, *lineno, name, mmax);
- }
- }
- }
- err = _set_value (hdf, name, m, 0, 1, 0, attr, NULL);
- if (err != STATUS_OK)
- {
- free (m);
- return nerr_pass_ctx(err, "In file %s:%d", path, *lineno);
- }
-
- }
- else
- {
- err = nerr_raise(NERR_PARSE, "[%s:%d] Unable to parse line %s", path,
- *lineno, line->buf);
- return err;
- }
- }
- }
- return STATUS_OK;
-}
-
-NEOERR * hdf_read_string (HDF *hdf, const char *str)
-{
- NEOERR *err;
- int lineno = 0;
- STRING line;
- string_init(&line);
- err = _hdf_read_string(hdf, &str, &line, "<string>", &lineno, INCLUDE_ERROR);
- string_clear(&line);
- return nerr_pass(err);
-}
-
-NEOERR * hdf_read_string_ignore (HDF *hdf, const char *str, int ignore)
-{
- NEOERR *err;
- int lineno = 0;
- STRING line;
- string_init(&line);
- err = _hdf_read_string(hdf, &str, &line, "<string>", &lineno,
- (ignore ? INCLUDE_IGNORE : INCLUDE_ERROR));
- string_clear(&line);
- return nerr_pass(err);
-}
-
-/* The search path is part of the HDF by convention */
-NEOERR* hdf_search_path (HDF *hdf, const char *path, char *full)
-{
- HDF *paths;
- struct stat s;
-
- for (paths = hdf_get_child (hdf, "hdf.loadpaths");
- paths;
- paths = hdf_obj_next (paths))
- {
- snprintf (full, _POSIX_PATH_MAX, "%s/%s", hdf_obj_value(paths), path);
- errno = 0;
- if (stat (full, &s) == -1)
- {
- if (errno != ENOENT)
- return nerr_raise_errno (NERR_SYSTEM, "Stat of %s failed", full);
- }
- else
- {
- return STATUS_OK;
- }
- }
-
- strncpy (full, path, _POSIX_PATH_MAX);
- if (stat (full, &s) == -1)
- {
- if (errno != ENOENT)
- return nerr_raise_errno (NERR_SYSTEM, "Stat of %s failed", full);
- }
- else return STATUS_OK;
-
- return nerr_raise (NERR_NOT_FOUND, "Path %s not found", path);
-}
-
-NEOERR* hdf_read_file (HDF *hdf, const char *path)
-{
- NEOERR *err;
- int lineno = 0;
- char fpath[_POSIX_PATH_MAX];
- char *ibuf = NULL;
- const char *ptr = NULL;
- HDF *top = hdf->top;
- STRING line;
-
- string_init(&line);
-
- if (path == NULL)
- return nerr_raise(NERR_ASSERT, "Can't read NULL file");
-
- if (top->fileload)
- {
- err = top->fileload(top->fileload_ctx, hdf, path, &ibuf);
- }
- else
- {
- if (path[0] != '/')
- {
- err = hdf_search_path (hdf, path, fpath);
- if (err != STATUS_OK) return nerr_pass(err);
- path = fpath;
- }
-
- err = ne_load_file (path, &ibuf);
- }
- if (err) return nerr_pass(err);
-
- ptr = ibuf;
- err = _hdf_read_string(hdf, &ptr, &line, path, &lineno, INCLUDE_FILE);
- free(ibuf);
- string_clear(&line);
- return nerr_pass(err);
-}
-
-void hdf_register_fileload(HDF *hdf, void *ctx, HDFFILELOAD fileload)
-{
- if (hdf == NULL) return;
- if (hdf->top != NULL) hdf = hdf->top;
- hdf->fileload_ctx = ctx;
- hdf->fileload = fileload;
-}
-
diff --git a/util/neo_hdf.h b/util/neo_hdf.h
deleted file mode 100644
index 27d58cb..0000000
--- a/util/neo_hdf.h
+++ /dev/null
@@ -1,587 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#ifndef __NEO_HDF_H_
-#define __NEO_HDF_H_ 1
-
-__BEGIN_DECLS
-
-#include <stdio.h>
-#include "util/neo_err.h"
-#include "util/neo_hash.h"
-
-#define FORCE_HASH_AT 10
-
-typedef struct _hdf HDF;
-
-/* HDFFILELOAD is a callback function to intercept file load requests and
- * provide templates via another mechanism. This way you can load templates
- * that you compiled-into your binary, from in-memory caches, or from a
- * zip file, etc. The HDF is provided so you can choose to use the
- * hdf_search_path function to find the file. contents should return
- * a full malloc copy of the contents of the file, which the parser will
- * own and free. Use hdf_register_fileload to set this function for
- * your top level HDF node.
- * NOTE: Technically, we shouldn't need a separate copy for each parse, but
- * using the separate copy makes this equivalent to the CSFILELOAD function. We
- * can change this if we really want to save that copy at the expense of
- * slightly more complicated code. */
-typedef NEOERR* (*HDFFILELOAD)(void *ctx, HDF *hdf, const char *filename,
- char **contents);
-
-typedef struct _attr
-{
- char *key;
- char *value;
- struct _attr *next;
-} HDF_ATTR;
-
-struct _hdf
-{
- int link;
- int alloc_value;
- char *name;
- int name_len;
- char *value;
- struct _attr *attr;
- struct _hdf *top;
- struct _hdf *next;
- struct _hdf *child;
-
- /* the following fields are used to implement a cache */
- struct _hdf *last_hp;
- struct _hdf *last_hs;
-
- /* the following HASH is used when we reach more than FORCE_HASH_AT
- * elements */
- NE_HASH *hash;
- /* When using the HASH, we need to know where to append new children */
- struct _hdf *last_child;
-
- /* Should only be set on the head node, used to override the default file
- * load method */
- void *fileload_ctx;
- HDFFILELOAD fileload;
-};
-
-/*
- * Function: hdf_init - Initialize an HDF data set
- * Description: hdf_init initializes an HDF data set and returns the
- * pointer to the top node in the data set.
- * Input: hdf - pointer to an HDF pointer
- * Output: hdf - allocated hdf node
- * Returns: NERR_NOMEM - unable to allocate memory for dataset
- */
-NEOERR* hdf_init (HDF **hdf);
-
-/*
- * Function: hdf_destroy - deallocate an HDF data set
- * Description: hdf_destroy is used to deallocate all memory associated
- * with an hdf data set. Although you can pass an HDF node
- * as an argument to this function, you are likely to cause
- * a segfault if you continue to access the data set. In
- * the future, we may restrict hdf_destroy so it only works
- * on the top level node.
- * Input: hdf - pointer to an HDF data set allocated with hdf_init
- * Output: None
- * Returns: None
- */
-void hdf_destroy (HDF **hdf);
-
-/*
- * Function: hdf_get_int_value - Return the integer value of a point in
- * the data set
- * Description: hdf_get_int_value walks the HDF data set pointed to by
- * hdf to name, and returns the value of that node
- * converted to an integer. If that node does not exist,
- * or it does not contain a number, the defval is returned.
- * Input: hdf -> a node in an HDF data set
- * name -> the name of a node to walk to in the data set
- * defval -> value to return in case of error or if the node
- * doesn't exist
- * Output: None
- * Returns: The integer value of the node, or the defval
- */
-int hdf_get_int_value (HDF *hdf, const char *name, int defval);
-
-/*
- * Function: hdf_get_value - Return the value of a node in the data set
- * Description: hdf_get_value walks the data set pointed to by hdf via
- * name and returns the string value located there, or
- * defval if the node doesn't exist
- * Input: hdf -> the dataset node to start from
- * name -> the name to walk the data set to
- * defval -> the default value to return if the node doesn't
- * exist
- * Output: None
- * Returns: A pointer to the string stored in the data set, or defval.
- * The data set maintains ownership of the string, if you want
- * a copy you either have to call strdup yourself, or use
- * hdf_get_copy
- */
-char *hdf_get_value (HDF *hdf, const char *name, const char *defval);
-
-/*
- * Function: hdf_get_valuevf - Return the value of a node in the data set
- * Description: hdf_get_valuevf walks the data set pointed to by hdf via
- * namefmt printf expanded with varargs ap, and returns the
- * string value located there, or NULL if it doesn't exist.
- * This differs from hdf_get_value in that there is no
- * default value possible.
- * Input: hdf -> the dataset node to start from
- * namefmt -> the format string
- * ap -> va_list of varargs
- * Output: None
- * Returns: A pointer to the string stored in the data set, or NULL.
- * The data set maintains ownership of the string, if you want
- * a copy you either have to call strdup yourself.
- */
-char* hdf_get_valuevf (HDF *hdf, const char *namefmt, va_list ap);
-
-/*
- * Function: hdf_get_valuef - Return the value of a node in the data set
- * Description: hdf_get_valuef walks the data set pointed to by hdf via
- * namefmt printf expanded with varargs, and returns the
- * string value located there, or NULL if it doesn't exist.
- * This differs from hdf_get_value in that there is no
- * default value possible.
- * Input: hdf -> the dataset node to start from
- * namefmt -> the printf-style format string
- * ... -> arguments to fill out namefmt
- * Output: None
- * Returns: A pointer to the string stored in the data set, or NULL.
- * The data set maintains ownership of the string, if you want
- * a copy you either have to call strdup yourself.
- */
-char* hdf_get_valuef (HDF *hdf, const char *namefmt, ...)
- ATTRIBUTE_PRINTF(2,3);
-
-/*
- * Function: hdf_get_copy - Returns a copy of a string in the HDF data set
- * Description: hdf_get_copy is similar to hdf_get_value, except that it
- * returns an malloc'd copy of the string.
- * Input: hdf -> the dataset node to start from
- * name -> the name to walk the data set to
- * defval -> the default value to return if the node doesn't
- * exist
- * Output: value -> the allocated string (if defval = NULL, then value
- * will be NULL if defval is used)
- * Returns: NERR_NOMEM if unable to allocate the new copy
- */
-NEOERR* hdf_get_copy (HDF *hdf, const char *name, char **value,
- const char *defval);
-
-/*
- * Function: hdf_get_obj - return the HDF data set node at a named location
- * Description: hdf_get_obj walks the dataset given by hdf to the node
- * named name, and then returns the pointer to that node
- * Input: hdf -> the dataset node to start from
- * name -> the name to walk to
- * Output: None
- * Returns: the pointer to the named node, or NULL if it doesn't exist
- */
-HDF* hdf_get_obj (HDF *hdf, const char *name);
-
-/*
- * Function: hdf_get_node - Similar to hdf_get_obj except all the nodes
- * are created if the don't exist.
- * Description: hdf_get_node is similar to hdf_get_obj, except instead
- * of stopping if it can't find a node in the tree, it will
- * create all of the nodes necessary to hand you back the
- * node you ask for. Nodes are created with no value.
- * Input: hdf -> the dataset node to start from
- * name -> the name to walk to
- * Output: ret -> the dataset node you asked for
- * Returns: NERR_NOMEM - unable to allocate new nodes
- */
-NEOERR * hdf_get_node (HDF *hdf, const char *name, HDF **ret);
-
-/*
- * Function: hdf_get_child - return the first child of the named node
- * Description: hdf_get_child will walk the dataset starting at hdf to
- * name, and return the first child of that node
- * Input: hdf -> the dataset node to start from
- * name -> the name to walk to
- * Output: None
- * Returns: The first child of the named dataset node or NULL if the
- * node is not found (or it has no children)
- */
-HDF* hdf_get_child (HDF *hdf, const char *name);
-
-/*
- * Function: hdf_get_attr -
- * Description:
- * Input:
- * Output:
- * Returns:
- */
-HDF_ATTR* hdf_get_attr (HDF *hdf, const char *name);
-
-/*
- * Function: hdf_set_attr -
- * Description:
- * Input:
- * Output:
- * Returns:
- */
-NEOERR* hdf_set_attr (HDF *hdf, const char *name, const char *key,
- const char *value);
-
-/*
- * Function: hdf_obj_child - Return the first child of a dataset node
- * Description: hdf_obj_child and the other hdf_obj_ functions are
- * accessors to the HDF dataset. Although we do not
- * currently "hide" the HDF struct implementation, we
- * recommend you use the accessor functions instead of
- * accessing the values directly.
- * Input: hdf -> the hdf dataset node
- * Output: None
- * Returns: The pointer to the first child, or NULL if there is none
- */
-HDF* hdf_obj_child (HDF *hdf);
-
-/*
- * Function: hdf_obj_next - Return the next node of a dataset level
- * Description: hdf_obj_next is an accessor function for the HDF struct
- * Input: hdf -> the hdf dataset node
- * Output: None
- * Returns: The pointer to the next node, or NULL if there is none
- */
-HDF* hdf_obj_next (HDF *hdf);
-
-/*
- * Function: hdf_obj_top - Return the pointer to the top dataset node
- * Description: hdf_obj_top is an accessor function which returns a
- * pointer to the top of the dataset, the node which was
- * returned by hdf_init. This is most useful for
- * implementations of language wrappers where individual
- * nodes are tied garbage colletion wise to the top node of
- * the data set
- * Input: hdf -> the hdf dataset node
- * Output: None
- * Returns: The pointer to the top node
- */
-HDF* hdf_obj_top (HDF *hdf);
-
-/*
- * Function: hdf_obj_attr - Return the HDF Attributes for a node
- * Description:
- * Input:
- * Output:
- * Returns:
- */
-HDF_ATTR* hdf_obj_attr (HDF *hdf);
-
-/*
- * Function: hdf_obj_name - Return the name of a node
- * Description: hdf_obj_name is an accessor function for a datset node
- * which returns the name of the node. This is just the
- * local name, and not the full path.
- * Input: hdf -> the hdf dataset node
- * Output: None
- * Returns: The name of the node. If this is the top node, the name is
- * NULL.
- */
-char* hdf_obj_name (HDF *hdf);
-
-/*
- * Function: hdf_obj_value - Return the value of a node
- * Description: hdf_obj_value is an accessor function for a dataset node
- * which returns the value of the node, or NULL if the node
- * has no value. This is not a copy of the value, so the
- * node retains ownership of the value
- * Input: hdf -> the hdf dataset node
- * Output: None
- * Returns: The value of the node, or NULL if it has no value
- */
-char* hdf_obj_value (HDF *hdf);
-
-/*
- * Function: hdf_set_value - Set the value of a named node
- * Description: hdf_set_value will set the value of a named node. All
- * of the interstitial nodes which don't exist will be
- * created with a value of NULL. Existing nodes are not
- * modified. New nodes are created at the end of the list.
- * If a list of nodes exceeds FORCE_HASH_AT, then a HASH
- * will be created at that level and all of the nodes will
- * be added to the hash for faster lookup times.
- * The copy of the value will be made which the dataset
- * will own.
- * Input: hdf -> the pointer to the hdf dataset
- * name -> the named node to walk to
- * value -> the value to set the node to
- * Output: None
- * Returns: NERR_NOMEM
- */
-NEOERR* hdf_set_value (HDF *hdf, const char *name, const char *value);
-
-/*
- * Function: hdf_set_valuef - Set the value of a named node
- * Description: hdf_set_valuef is a convenience function that wraps
- * hdf_set_value. Due to limitations of C, the fmt is in
- * the format "name=value", where we will first format the
- * entire string, and then break it at the first (from the
- * left) equal sign (=) and use the left portion as the
- * name and the right portion as the value. This function
- * is somewhat inefficient in that it first allocates the
- * full name=value, and then the call to hdf_set_value
- * duplicates the value portion, and then we free the
- * name=value.
- * Currently, we don't strip whitespace from the key or
- * value. In the future, this function might work more
- * like reading a single line of an HDF string or file,
- * allowing for attributes and symlinks to be specified...
- * maybe.
- * Input: hdf -> the pointer to the hdf dataset
- * fmt -> the name=value printf(3) format string
- * Output: None
- * Returns: NERR_NOMEM
- */
-NEOERR* hdf_set_valuef (HDF *hdf, const char *fmt, ...)
- ATTRIBUTE_PRINTF(2,3);
-NEOERR* hdf_set_valuevf (HDF *hdf, const char *fmt, va_list ap);
-
-/*
- * Function: hdf_set_int_value - Set the value of a named node to a number
- * Description: hdf_set_int_value is a helper function that maps an
- * integer to a string, and then calls hdf_set_value with
- * that string
- * Input: hdf -> the pointer to the hdf dataset
- * name -> the named node to walk to
- * value -> the value to set the node to
- * Output: None
- * Returns: NERR_NOMEM
- */
-NEOERR* hdf_set_int_value (HDF *hdf, const char *name, int value);
-
-/*
- * Function: hdf_set_copy -> Copy a value from one location in the
- * dataset to another
- * Description: hdf_set_copy first walks the hdf dataset to the named src
- * node, and then copies that value to the named dest node.
- * If the src node is not found, an error is raised.
- * Input: hdf -> the pointer to the dataset node
- * dest -> the name of the destination node
- * src -> the name of the source node
- * Output: None
- * Returns: NERR_NOMEM, NERR_NOT_FOUND
- */
-NEOERR* hdf_set_copy (HDF *hdf, const char *dest, const char *src);
-
-/*
- * Function: hdf_set_buf - Set the value of a node without duplicating
- * the value
- * Description: hdf_set_buf is similar to hdf_set_value, except the
- * dataset takes ownership of the value instead of making a
- * copy of it. The dataset assumes that value was
- * malloc'd, since it will attempt to free it when
- * hdf_destroy is called
- * Input: hdf -> the hdf dataset node
- * name -> the name to walk to
- * value -> the malloc'd value
- * Output: None
- * Returns: NERR_NOMEM - unable to allocate a node
- */
-
-NEOERR* hdf_set_buf (HDF *hdf, const char *name, char *value);
-
-/*
- * Function: hdf_set_symlink - Set part of the tree to link to another
- * Description: hdf_set_symlink creates a link between two sections of
- * an HDF dataset. The link is "by name" hence the term
- * "symlink". This means that the destination node does
- * not need to exist. Any attempt to access the source
- * node will cause the function to walk to the dest node,
- * and then continue walking from there. Using symlinks
- * can "hide" values in the dataset since you won't be able
- * to access any children of the linked node directly,
- * though dumps and other things which access the data
- * structure directly will bypass the symlink. Use this
- * feature sparingly as its likely to surprise you.
- * Input: hdf -> the dataset node
- * src -> the source node name
- * dest -> the destination node name (from the top of the
- * dataset, not relative names)
- * Output: None
- * Returns: NERR_NOMEM
- */
-NEOERR *hdf_set_symlink (HDF *hdf, const char *src, const char *dest);
-
-/*
- * Function: hdf_sort_obj - sort the children of an HDF node
- * Description: hdf_sort_obj will sort the children of an HDF node,
- * based on the given comparison function.
- * This function works by creating an array of the pointers
- * for each child object of h, using qsort to sort that
- * array, and then re-ordering the linked list of children
- * to the new order. The qsort compare function uses a
- * pointer to the value in the array, which in our case is
- * a pointer to an HDF struct, so your comparison function
- * should work on HDF ** pointers.
- * Input: h - HDF node
- * compareFunc - function which returns 1,0,-1 depending on some
- * criteria. The arguments to this sort function
- * are pointers to pointers to HDF elements. For
- * example:
- * int sortByName(const void *a, const void *b) {
- * HDF **ha = (HDF **)a;
- * HDF **hb = (HDF **)b;
- *
- * return strcasecmp(hdf_obj_name(*ha), hdf_obj_name(*hb));
- * }
- *
- * Output: None (h children will be sorted)
- * Return: NERR_NOMEM
- */
-NEOERR *hdf_sort_obj(HDF *h, int (*compareFunc)(const void *, const void *));
-
-/*
- * Function: hdf_read_file - read an HDF data file
- * Description:
- * Input:
- * Output:
- * Returns: NERR_IO, NERR_NOMEM, NERR_PARSE
- */
-NEOERR* hdf_read_file (HDF *hdf, const char *path);
-
-/*
- * Function: hdf_write_file - write an HDF data file
- * Description:
- * Input:
- * Output:
- * Returns: NERR_IO
- */
-NEOERR* hdf_write_file (HDF *hdf, const char *path);
-
-/*
- * Function: hdf_write_file_atomic - write an HDF data file atomically
- * Description: hdf_write_file_atomic is similar to hdf_write_file,
- * except the new file is created with a unique name and
- * then rename(2) is used to atomically replace the old
- * file with the new file
- * Input:
- * Output:
- * Returns: NERR_IO
- */
-NEOERR* hdf_write_file_atomic (HDF *hdf, const char *path);
-
-/*
- * Function: hdf_read_string - read an HDF string
- * Description:
- * Input:
- * Output:
- * Returns: NERR_NOMEM, NERR_PARSE
- */
-NEOERR* hdf_read_string (HDF *hdf, const char *s);
-
-/*
- * Function: hdf_read_string_ignore - Read an HDF string and ignore errors
- * Description:
- * Input:
- * Output:
- * Returns: NERR_NOMEM
- */
-NEOERR* hdf_read_string_ignore (HDF *hdf, const char *s, int ignore);
-
-/*
- * Function: hdf_write_string - serialize an HDF dataset to a string
- * Description:
- * Input:
- * Output:
- * Returns: NERR_NOMEM
- */
-NEOERR* hdf_write_string (HDF *hdf, char **s);
-
-/*
- * Function: hdf_dump - dump an HDF dataset to stdout
- * Description:
- * Input:
- * Output:
- * Returns:
- */
-NEOERR* hdf_dump (HDF *hdf, const char *prefix);
-
-/*
- * Function: hdf_dump_format - dump an HDF dataset to FILE *fp
- * Description:
- * Input:
- * Output:
- * Returns:
- */
-NEOERR* hdf_dump_format (HDF *hdf, int lvl, FILE *fp);
-
-/*
- * Function: hdf_dump_str - dump an HDF dataset to STRING
- * Description:
- * Input:
- * Output:
- * Returns:
- */
-NEOERR* hdf_dump_str(HDF *hdf, const char *prefix, int compact, STRING *str);
-
-/*
- * Function: hdf_remove_tree - delete a subtree of an HDF dataset
- * Description:
- * Input:
- * Output:
- * Returns:
- */
-NEOERR* hdf_remove_tree (HDF *hdf, const char *name);
-
-/*
- * Function: hdf_copy - copy part of an HDF dataset to another
- * Description: hdf_copy is a deep copy of an HDF tree pointed to by
- * src to the named node of dest. dest and src need not be
- * part of the same data set
- * Input: dest_hdf -> the destination dataset
- * name -> the name of the destination node
- * src -> the hdf dataset to copy to the destination
- * Output: None
- * Returns: NERR_NOMEM, NERR_NOT_FOUND
- */
-NEOERR* hdf_copy (HDF *dest_hdf, const char *name, HDF *src);
-
-/*
- * Function: hdf_search_path - Find a file given a search path in HDF
- * Description: hdf_search_path is a convenience/utility function that
- * searches for relative filenames in a search path. The
- * search path is the list given by the children of
- * hdf.loadpaths.
- * Input: hdf -> the hdf dataset to use
- * path -> the relative path
- * full -> a pointer to a _POSIX_PATH_MAX buffer
- * Output: full -> the full path of the file
- * Returns: NERR_NOT_FOUND if the file wasn't found in the search path
- */
-NEOERR* hdf_search_path (HDF *hdf, const char *path, char *full);
-
-/*
- * Function: hdf_register_fileload - register a fileload function
- * Description: hdf_register_fileload registers a fileload function that
- * overrides the built-in function. The built-in function
- * uses hdf_search_path and ne_file_load (based on stat/open/read)
- * to find and load the file on every hdf_read_file (including
- * #include). You can override this function if you wish to provide
- * other file search functions, or load the hdf file
- * from an in-memory cache, etc.
- * Input: hdf - pointer to a head HDF node
- * ctx - pointer that is passed to the HDFFILELOAD function when called
- * fileload - a HDFFILELOAD function
- * Output: None
- * Return: None
- *
- */
-
-void hdf_register_fileload(HDF *hdf, void *ctx, HDFFILELOAD fileload);
-
-__END_DECLS
-
-#endif /* __NEO_HDF_H_ */
diff --git a/util/neo_misc.c b/util/neo_misc.c
deleted file mode 100644
index f1e8d61..0000000
--- a/util/neo_misc.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#include "cs_config.h"
-
-#include <time.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <string.h>
-#include <unistd.h>
-#include "neo_misc.h"
-#include "neo_err.h"
-
-void ne_vwarn (const char *fmt, va_list ap)
-{
- char tbuf[20];
- char buf[1024];
- struct tm my_tm;
- time_t now;
- int len;
-
- now = time(NULL);
-
- localtime_r(&now, &my_tm);
-
- strftime(tbuf, sizeof(tbuf), "%m/%d %T", &my_tm);
-
- vsnprintf (buf, sizeof(buf), fmt, ap);
- len = strlen(buf);
- while (len && isspace (buf[len-1])) buf[--len] = '\0';
- fprintf (stderr, "[%s] %s\n", tbuf, buf);
-}
-
-void ne_warn (const char *fmt, ...)
-{
- va_list ap;
- va_start (ap, fmt);
- ne_vwarn (fmt, ap);
- va_end (ap);
-}
-
-static int LogLevel = 0;
-
-void ne_set_log (int level)
-{
- LogLevel = level;
-}
-
-void ne_log (int level, const char *fmt, ...)
-{
- va_list ap;
-
- if (LogLevel >= level)
- {
- va_start (ap, fmt);
- ne_vwarn (fmt, ap);
- va_end (ap);
- }
-}
-
-UINT32 python_string_hash (const char *s)
-{
- int len=0;
- register UINT32 x;
-
- x = *s << 7;
- while(*s != 0) {
- x = (1000003*x) ^ *s;
- s++;
- len++;
- }
- x ^= len;
- if(x == -1) x = -2;
- return x;
-}
-
-UINT8 *ne_stream4 (UINT8 *dest, UINT32 num)
-{
- dest[0] = num & 0xFF;
- dest[1] = (num >> 8) & 0xFF;
- dest[2] = (num >> 16) & 0xFF;
- dest[3] = (num >> 24) & 0xFF;
-
- return dest + 4;
-}
-
-UINT8 *ne_stream2 (UINT8 *dest, UINT16 num)
-{
- dest[0] = num & 0xFF;
- dest[1] = (num >> 8) & 0xFF;
-
- return dest + 2;
-}
-
-UINT8 *ne_unstream4 (UINT32 *pnum, UINT8 *src)
-{
- *pnum = src[0] | (src[1] << 8) | (src[2] << 16) | (src[3] << 24);
-
- return src + 4;
-}
-
-UINT8 *ne_unstream2 (UINT16 *pnum, UINT8 *src)
-{
- *pnum = src[0] | (src[1] << 8);
-
- return src + 2;
-}
-
-/* This handles strings of less than 256 bytes */
-UINT8 *ne_unstream_str (char *s, int l, UINT8 *src)
-{
- UINT8 sl;
-
- sl = src[0];
- if (sl > l)
- sl = l;
- memcpy (s, src+1, sl);
- s[l-1] = '\0';
- return src+sl+1;
-}
-
-UINT8 *ne_stream_str (UINT8 *dest, const char *s, int l)
-{
- if (l > 255)
- {
- ne_warn("WARNING: calling ne_stream_str with l>255");
- l = 255;
- }
- dest[0] = l;
- memcpy (dest+1, s, l);
- return dest+l+1;
-}
-
-#ifndef HAVE_GETTIMEOFDAY
-
-/* Ok, if we don't have gettimeofday, they only get second resolution */
-double ne_timef (void) {
- return time(NULL);
-}
-
-#else
-
-double ne_timef (void)
-{
- double f = 0;
- struct timeval tv;
- int ret;
-
- ret = gettimeofday(&tv, NULL);
- if (ret == 0)
- {
- f = tv.tv_sec + (tv.tv_usec / 1000000.0);
- }
- return f;
-}
-#endif
-
-static const UINT32 CRCTable[256] = {
-0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,
-0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
-0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,
-0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
-0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,
-0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
-0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,
-0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
-0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,
-0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
-0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,
-0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
-0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,
-0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
-0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,
-0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
-0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,
-0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
-0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,
-0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
-0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,
-0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
-0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,
-0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
-0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,
-0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
-0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,
-0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
-0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,
-0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
-0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,
-0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
-0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,
-0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
-0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,
-0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
-0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,
-0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
-0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,
-0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
-0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,
-0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
-0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
-};
-
-UINT32 ne_crc (UINT8 *data, UINT32 bytes)
-{
- UINT32 crc, i;
-
- crc = (UINT32)-1;
-
- for(i = 0; i < bytes; i++, data++)
- crc = ((crc >> 8) & 0xFFFFFF) ^ CRCTable[((crc ^ *data) & 0xFF)];
-
- crc = ~crc;
-
- return crc;
-}
-
diff --git a/util/neo_misc.h b/util/neo_misc.h
deleted file mode 100644
index 16c1837..0000000
--- a/util/neo_misc.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#ifndef __NEO_MISC_H_
-#define __NEO_MISC_H_ 1
-
-#include <stdlib.h>
-#include <time.h>
-#include <limits.h>
-
-/* In case they didn't start from ClearSilver.h. */
-#ifndef __CS_CONFIG_H_
-#include "cs_config.h"
-#endif
-
-/* Fix Up for systems that don't define these standard things */
-#ifndef __BEGIN_DECLS
-#ifdef __cplusplus
-#define __BEGIN_DECLS extern "C" {
-#define __END_DECLS }
-#else
-#define __BEGIN_DECLS
-#define __END_DECLS
-#endif
-#endif
-
-#ifndef _POSIX_PATH_MAX
-#define _POSIX_PATH_MAX 255
-#endif
-
-#ifndef S_IXGRP
-#define S_IXGRP S_IXUSR
-#endif
-#ifndef S_IWGRP
-#define S_IWGRP S_IWUSR
-#endif
-#ifndef S_IRGRP
-#define S_IRGRP S_IRUSR
-#endif
-#ifndef S_IXOTH
-#define S_IXOTH S_IXUSR
-#endif
-#ifndef S_IWOTH
-#define S_IWOTH S_IWUSR
-#endif
-#ifndef S_IROTH
-#define S_IROTH S_IRUSR
-#endif
-
-/* Format string checking for compilers that support it (GCC style) */
-
-#if __GNUC__ > 2 || __GNUC__ == 2 && __GNUC_MINOR__ > 6
-#define ATTRIBUTE_PRINTF(a1,a2) __attribute__((__format__ (__printf__, a1, a2)))
-#else
-#define ATTRIBUTE_PRINTF(a1,a2)
-#endif
-
-
-__BEGIN_DECLS
-
-#ifndef HAVE_STRTOK_R
-char * strtok_r (char *s,const char * delim, char **save_ptr);
-#endif
-
-#ifndef HAVE_LOCALTIME_R
-struct tm *localtime_r (const time_t *timep, struct tm *ttm);
-#endif
-
-#ifndef HAVE_GMTIME_R
-struct tm *gmtime_r(const time_t *timep, struct tm *ttm);
-#endif
-
-#ifndef HAVE_MKSTEMP
-int mkstemp(char *path);
-#endif
-
-#ifndef HAVE_SNPRINTF
-int snprintf (char *str, size_t count, const char *fmt, ...)
- ATTRIBUTE_PRINTF(3,4);
-#endif
-
-#ifndef HAVE_VSNPRINTF
-int vsnprintf (char *str, size_t count, const char *fmt, va_list arg);
-#endif
-
-#include <stdarg.h>
-#include <sys/types.h>
-
-typedef unsigned int UINT32;
-typedef int INT32;
-typedef unsigned short int UINT16;
-typedef short int INT16;
-typedef unsigned char UINT8;
-typedef char INT8;
-typedef char BOOL;
-
-#ifndef MIN
-#define MIN(x,y) (((x) < (y)) ? (x) : (y))
-#endif
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-void ne_vwarn (const char *fmt, va_list ap);
-void ne_warn (const char *fmt, ...)
- ATTRIBUTE_PRINTF(1,2);
-void ne_set_log (int level);
-void ne_log (int level, const char *fmt, ...)
- ATTRIBUTE_PRINTF(2,3);
-UINT32 python_string_hash (const char *s);
-UINT8 *ne_stream4 (UINT8 *dest, UINT32 num);
-UINT8 *ne_unstream4 (UINT32 *pnum, UINT8 *src);
-UINT8 *ne_stream2 (UINT8 *dest, UINT16 num);
-UINT8 *ne_unstream2 (UINT16 *pnum, UINT8 *src);
-UINT8 *ne_stream_str (UINT8 *dest, const char *s, int l);
-UINT8 *ne_unstream_str (char *s, int l, UINT8 *src);
-double ne_timef (void);
-UINT32 ne_crc (UINT8 *data, UINT32 bytes);
-
-__END_DECLS
-
-#endif /* __NEO_MISC_H_ */
diff --git a/util/neo_net.c b/util/neo_net.c
deleted file mode 100644
index f48d138..0000000
--- a/util/neo_net.c
+++ /dev/null
@@ -1,676 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#include "cs_config.h"
-
-#include <unistd.h>
-#include <sys/socket.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <netinet/tcp.h>
-#include <netdb.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-
-#include "neo_misc.h"
-#include "neo_err.h"
-#include "neo_net.h"
-#include "neo_str.h"
-
-static int ShutdownAccept = 0;
-
-void ne_net_shutdown()
-{
- ShutdownAccept = 1;
-}
-
-/* Server side */
-NEOERR *ne_net_listen(int port, int *fd)
-{
- int sfd = 0;
- int on = 1;
-/* int flags; */
- struct sockaddr_in serv_addr;
-
- if ((sfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
- return nerr_raise_errno(NERR_IO, "Unable to create socket");
-
- if (setsockopt (sfd, SOL_SOCKET, SO_REUSEADDR, (char *)&on,
- sizeof(on)) == -1)
- {
- close(sfd);
- return nerr_raise_errno(NERR_IO, "Unable to setsockopt(SO_REUSEADDR)");
- }
-
- if(setsockopt (sfd, SOL_SOCKET, SO_KEEPALIVE, (void *)&on,
- sizeof(on)) == -1)
- {
- close(sfd);
- return nerr_raise_errno(NERR_IO, "Unable to setsockopt(SO_KEEPALIVE)");
- }
-
- if(setsockopt (sfd, IPPROTO_TCP, TCP_NODELAY, (void *)&on,
- sizeof(on)) == -1)
- {
- close(sfd);
- return nerr_raise_errno(NERR_IO, "Unable to setsockopt(TCP_NODELAY)");
- }
- serv_addr.sin_family = AF_INET;
- serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
- serv_addr.sin_port = htons(port);
-
- if (bind(sfd,(struct sockaddr *)&(serv_addr),sizeof(struct sockaddr)) == -1)
- {
- close(sfd);
- return nerr_raise_errno(NERR_IO, "Unable to bind to port %d", port);
- }
-
- /* If set non-block, then we have to use select prior to accept...
- * typically we don't, so we'll leave this out until we have a need
- * for it and then figure out how to work it into the common code */
- /*
- flags = fcntl(sfd, F_GETFL, 0 );
- if (flags == -1)
- {
- close(sfd);
- return nerr_raise_errno(NERR_IO, "Unable to get socket flags for port %d",
- port);
- }
-
- if (fcntl(sfd, F_SETFL, flags | O_NDELAY) == -1)
- {
- close(sfd);
- return nerr_raise_errno(NERR_IO, "Unable to set O_NDELAY for port %d",
- port);
- }
- */
-
- if (listen(sfd, 100) == -1)
- {
- close(sfd);
- return nerr_raise_errno(NERR_IO, "Unable to listen on port %d", port);
- }
- *fd = sfd;
-
- return STATUS_OK;
-}
-
-NEOERR *ne_net_accept(NSOCK **sock, int sfd, int data_timeout)
-{
- NSOCK *my_sock;
- int fd;
- struct sockaddr_in client_addr;
- socklen_t len;
-
- len = sizeof(struct sockaddr_in);
- while (1)
- {
- fd = accept(sfd, (struct sockaddr *)&client_addr, &len);
- if (fd >= 0) break;
- if (ShutdownAccept || errno != EINTR)
- {
- return nerr_raise_errno(NERR_IO, "accept() returned error");
- }
- if (errno == EINTR)
- {
- ne_warn("accept received EINTR");
- }
- }
-
- my_sock = (NSOCK *) calloc(1, sizeof(NSOCK));
- if (my_sock == NULL)
- {
- close(fd);
- return nerr_raise(NERR_NOMEM, "Unable to allocate memory for NSOCK");
- }
- my_sock->fd = fd;
- my_sock->remote_ip = ntohl(client_addr.sin_addr.s_addr);
- my_sock->remote_port = ntohs(client_addr.sin_port);
- my_sock->data_timeout = data_timeout;
-
- *sock = my_sock;
-
- return STATUS_OK;
-}
-
-/* Client side */
-NEOERR *ne_net_connect(NSOCK **sock, const char *host, int port,
- int conn_timeout, int data_timeout)
-{
- struct sockaddr_in serv_addr;
- struct hostent hp;
- struct hostent *php;
- int fd;
- int r = 0, x;
- int flags;
- struct timeval tv;
- fd_set fds;
- int optval;
- socklen_t optlen;
- NSOCK *my_sock;
-
- /* FIXME: This isn't thread safe... but there's no man entry for the _r
- * version? */
-
- php = gethostbyname(host);
- if (php == NULL)
- {
- return nerr_raise(NERR_IO, "Host not found: %s", hstrerror(h_errno));
- }
- hp = *php;
-
- memset(&serv_addr, 0, sizeof(serv_addr));
- serv_addr.sin_family = AF_INET;
- serv_addr.sin_port = htons(port);
- fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
- if (fd == -1)
- return nerr_raise_errno(NERR_IO, "Unable to create socket");
-
- flags = fcntl(fd, F_GETFL, 0 );
- if (flags == -1)
- {
- close(fd);
- return nerr_raise_errno(NERR_IO, "Unable to get socket flags");
- }
-
- if (fcntl(fd, F_SETFL, flags | O_NDELAY) == -1)
- {
- close(fd);
- return nerr_raise_errno(NERR_IO, "Unable to set O_NDELAY");
- }
-
- x = 0;
- while (hp.h_addr_list[x] != NULL)
- {
- memcpy(&(serv_addr.sin_addr), hp.h_addr_list[x], sizeof(struct in_addr));
- errno = 0;
- r = connect(fd, (struct sockaddr *) &(serv_addr), sizeof(struct sockaddr_in));
- if (r == 0 || errno == EINPROGRESS) break;
- x++;
- }
- if (r != 0)
- {
- if (errno != EINPROGRESS)
- {
- close(fd);
- return nerr_raise_errno(NERR_IO, "Unable to connect to %s:%d",
- host, port);
- }
- tv.tv_sec = conn_timeout;
- tv.tv_usec = 0;
-
- FD_ZERO(&fds);
- FD_SET(fd, &fds);
-
- r = select(fd+1, NULL, &fds, NULL, &tv);
- if (r == 0)
- {
- close(fd);
- return nerr_raise(NERR_IO, "Connection to %s:%d failed: Timeout", host,
- port);
- }
- if (r < 0)
- {
- close(fd);
- return nerr_raise_errno(NERR_IO, "Connection to %s:%d failed", host,
- port);
- }
-
- optlen = sizeof(optval);
-
- if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &optval, &optlen) == -1)
- {
- close(fd);
- return nerr_raise_errno(NERR_IO,
- "Unable to getsockopt to determine connection error");
- }
-
- if (optval)
- {
- close(fd);
- errno = optval;
- return nerr_raise_errno(NERR_IO, "Connection to %s:%d failed", host,
- port);
- }
- }
- /* Re-enable blocking... we'll use select on read/write for timeouts
- * anyways, and if we want non-blocking version in the future we'll
- * add a flag or something.
- */
- flags = fcntl(fd, F_GETFL, 0 );
- if (flags == -1)
- {
- close(fd);
- return nerr_raise_errno(NERR_IO, "Unable to get socket flags");
- }
-
- if (fcntl(fd, F_SETFL, flags & ~O_NDELAY) == -1)
- {
- close(fd);
- return nerr_raise_errno(NERR_IO, "Unable to set O_NDELAY");
- }
-
- my_sock = (NSOCK *) calloc(1, sizeof(NSOCK));
- if (my_sock == NULL)
- {
- close(fd);
- return nerr_raise(NERR_NOMEM, "Unable to allocate memory for NSOCK");
- }
- my_sock->fd = fd;
- my_sock->remote_ip = ntohl(serv_addr.sin_addr.s_addr);
- my_sock->remote_port = port;
- my_sock->data_timeout = data_timeout;
- my_sock->conn_timeout = conn_timeout;
-
- *sock = my_sock;
-
- return STATUS_OK;
-}
-
-NEOERR *ne_net_close(NSOCK **sock)
-{
- NEOERR *err;
-
- if (sock == NULL || *sock == NULL) return STATUS_OK;
- err = ne_net_flush(*sock);
- close((*sock)->fd);
- free((*sock));
- *sock = NULL;
- return nerr_pass(err);
-}
-
-/* Low level data interface ... we are implementing a buffered stream
- * here, and the fill and flush are designed for that. More over, our
- * buffered stream assumes a certain type of protocol design where we
- * flush the write buffer before reading... there are possible protocols
- * where this would be grossly inefficient, but I don't expect to use
- * anything like that */
-
-/* Also, an annoyance here... what to do with the EOF case? Currently,
- * we're just returing with a ol of 0, which means in most cases when
- * calling this we have to check that case as well as standard errors.
- * We could raise an NERR_EOF or something, but that seems like
- * overkill. We should probably have a ret arg for the case... */
-static NEOERR *ne_net_fill(NSOCK *sock)
-{
- NEOERR *err;
- struct timeval tv;
- fd_set fds;
- int r;
-
- /* Ok, we are assuming a model where one side of the connection is the
- * consumer and the other the producer... and then it switches. So we
- * flush the output buffer (if any) before we read */
- if (sock->ol)
- {
- err = ne_net_flush(sock);
- if (err) return nerr_pass(err);
- }
-
- /* Ok, we want connections to fail if they don't connect in
- * conn_timeout... but with higher listen queues, the connection could
- * actually connect, but the remote server won't get to it within the
- * conn_timeout, we still want it to fail. We do that by using the
- * conn_timeout on the first read ... this isn't quite the same as we
- * might actually timeout at almost 2x conn_timeout (if we had to wait
- * for connect and the first read) but its still better then waiting
- * the full data timeout */
- if (sock->conn_timeout)
- {
- tv.tv_sec = sock->conn_timeout;
- sock->conn_timeout = 0;
- }
- else
- {
- tv.tv_sec = sock->data_timeout;
- }
- tv.tv_usec = 0;
-
- FD_ZERO(&fds);
- FD_SET(sock->fd, &fds);
-
- r = select(sock->fd+1, &fds, NULL, NULL, &tv);
- if (r == 0)
- {
- return nerr_raise(NERR_IO, "read failed: Timeout");
- }
- if (r < 0)
- {
- return nerr_raise_errno(NERR_IO, "select for read failed");
- }
-
- sock->ibuf[0] = '\0';
- r = read(sock->fd, sock->ibuf, NET_BUFSIZE);
- if (r < 0)
- {
- return nerr_raise_errno(NERR_IO, "read failed");
- }
-
- sock->ib = 0;
- sock->il = r;
-
- return STATUS_OK;
-}
-
-NEOERR *ne_net_flush(NSOCK *sock)
-{
- fd_set fds;
- struct timeval tv;
- int r;
- int x = 0;
-
- if (sock->conn_timeout)
- {
- tv.tv_sec = sock->conn_timeout;
- }
- else
- {
- tv.tv_sec = sock->data_timeout;
- }
- tv.tv_usec = 0;
-
- x = 0;
- while (x < sock->ol)
- {
- FD_ZERO(&fds);
- FD_SET(sock->fd, &fds);
-
- r = select(sock->fd+1, NULL, &fds, NULL, &tv);
- if (r == 0)
- {
- return nerr_raise(NERR_IO, "write failed: Timeout");
- }
- if (r < 0)
- {
- return nerr_raise_errno(NERR_IO, "select for write failed");
- }
-
- r = write(sock->fd, sock->obuf + x, sock->ol - x);
- if (r < 0)
- {
- return nerr_raise_errno(NERR_IO, "select for write failed");
- }
- x += r;
- }
- sock->ol = 0;
- return STATUS_OK;
-}
-
-/* hmm, we may need something to know how much we've read here... */
-NEOERR *ne_net_read(NSOCK *sock, UINT8 *buf, int buflen)
-{
- NEOERR *err;
- int x = 0;
- int l;
-
- x = buflen;
- while (x > 0)
- {
- if (sock->il - sock->ib > 0)
- {
- if (sock->ib + x <= sock->il)
- l = x;
- else
- l = sock->il - sock->ib;
-
- memcpy(buf + buflen - x, sock->ibuf + sock->ib, l);
- sock->ib += l;
- x -= l;
- }
- else
- {
- err = ne_net_fill(sock);
- if (err) return nerr_pass(err);
- if (sock->il == 0) return STATUS_OK;
- }
- }
- return STATUS_OK;
-}
-
-NEOERR *ne_net_read_line(NSOCK *sock, char **buf)
-{
- NEOERR *err;
- STRING str;
- UINT8 *nl;
- int l;
-
- string_init(&str);
-
- while (1)
- {
- if (sock->il - sock->ib > 0)
- {
- nl = memchr(sock->ibuf + sock->ib, '\n', sock->il - sock->ib);
- if (nl == NULL)
- {
- l = sock->il - sock->ib;
- err = string_appendn(&str, (char *)(sock->ibuf + sock->ib), l);
- sock->ib += l;
- if (err) break;
- }
- else
- {
- l = nl - (sock->ibuf + sock->ib);
- err = string_appendn(&str, (char *)(sock->ibuf + sock->ib), l);
- sock->ib += l;
- if (err) break;
-
- *buf = str.buf;
- return STATUS_OK;
- }
- }
- else
- {
- err = ne_net_fill(sock);
- if (err) break;
- if (sock->il == 0) return STATUS_OK;
- }
- }
- string_clear(&str);
- return nerr_pass(err);
-}
-
-static NEOERR *_ne_net_read_int(NSOCK *sock, int *i, char end)
-{
- NEOERR *err;
- int x = 0;
- char buf[32];
- char *ep = NULL;
-
- while (x < sizeof(buf))
- {
- while (sock->il - sock->ib > 0)
- {
- buf[x] = sock->ibuf[sock->ib++];
- if (buf[x] == end) break;
- x++;
- if (x == sizeof(buf)) break;
- }
- if (buf[x] == end) break;
- err = ne_net_fill(sock);
- if (err) return nerr_pass(err);
- if (sock->il == 0) return STATUS_OK;
- }
-
- if (x == sizeof(buf))
- return nerr_raise(NERR_PARSE, "Format error on stream, expected '%c'", end);
-
- buf[x] = '\0';
- *i = strtol(buf, &ep, 10);
- if (ep && *ep)
- {
- return nerr_raise(NERR_PARSE, "Format error on stream, expected number followed by '%c'", end);
- }
-
- return STATUS_OK;
-}
-
-NEOERR *ne_net_read_binary(NSOCK *sock, UINT8 **b, int *blen)
-{
- NEOERR *err;
- UINT8 *data;
- UINT8 buf[5];
- int l;
-
- err = _ne_net_read_int(sock, &l, ':');
- if (err) return nerr_pass(err);
-
- /* Special case to read a NULL */
- if (l < 0)
- {
- *b = NULL;
- if (blen != NULL) *blen = l;
- return STATUS_OK;
- }
-
- data = (UINT8 *) malloc(l + 1);
- if (data == NULL)
- {
- /* We might want to clear the incoming data here... */
- return nerr_raise(NERR_NOMEM,
- "Unable to allocate memory for binary data %d" , l);
- }
-
- err = ne_net_read(sock, data, l);
- if (err)
- {
- free(data);
- return nerr_pass(err);
- }
- /* check for comma separator */
- err = ne_net_read(sock, buf, 1);
- if (err)
- {
- free(data);
- return nerr_pass(err);
- }
- if (buf[0] != ',')
- {
- free(data);
- return nerr_raise(NERR_PARSE, "Format error on stream, expected ','");
- }
-
- *b = data;
- if (blen != NULL) *blen = l;
- return STATUS_OK;
-}
-
-NEOERR *ne_net_read_str_alloc(NSOCK *sock, char **s, int *len)
-{
- NEOERR *err;
- int l;
-
- /* just use the binary read and null terminate the string... */
- err = ne_net_read_binary(sock, (UINT8 **)s, &l);
- if (err) return nerr_pass(err);
-
- if (*s != NULL)
- {
- (*s)[l] = '\0';
- }
- if (len != NULL) *len = l;
- return STATUS_OK;
-}
-
-NEOERR *ne_net_read_int(NSOCK *sock, int *i)
-{
- return nerr_pass(_ne_net_read_int(sock, i, ','));
-}
-
-NEOERR *ne_net_write(NSOCK *sock, const char *b, int blen)
-{
- NEOERR *err;
- int x = 0;
- int l;
-
- x = blen;
- while (x > 0)
- {
- if (sock->ol < NET_BUFSIZE)
- {
- if (sock->ol + x <= NET_BUFSIZE)
- {
- l = x;
- }
- else
- {
- l = NET_BUFSIZE - sock->ol;
- }
-
- memcpy(sock->obuf + sock->ol, b + blen - x, l);
- sock->ol += l;
- x -= l;
- }
- else
- {
- err = ne_net_flush(sock);
- if (err) return nerr_pass(err);
- }
- }
- return STATUS_OK;
-}
-
-NEOERR *ne_net_write_line(NSOCK *sock, const char *s)
-{
- NEOERR *err;
-
- err = ne_net_write(sock, s, strlen(s));
- if (err) return nerr_pass(err);
- err = ne_net_write(sock, "\n", 1);
- if (err) return nerr_pass(err);
- return STATUS_OK;
-}
-
-NEOERR *ne_net_write_binary(NSOCK *sock, const char *b, int blen)
-{
- NEOERR *err;
- char buf[32];
-
- if (b == NULL) blen = -1;
-
- snprintf(buf, sizeof(buf), "%d:", blen);
- err = ne_net_write(sock, buf, strlen(buf));
- if (err) return nerr_pass(err);
-
- if (blen > 0)
- {
- err = ne_net_write(sock, b, blen);
- if (err) return nerr_pass(err);
- }
-
- err = ne_net_write(sock, ",", 1);
- if (err) return nerr_pass(err);
- return STATUS_OK;
-}
-
-NEOERR *ne_net_write_str(NSOCK *sock, const char *s)
-{
- NEOERR *err;
-
- if (s == NULL)
- err = ne_net_write_binary(sock, s, -1);
- else
- err = ne_net_write_binary(sock, s, strlen(s));
- return nerr_pass(err);
-}
-
-NEOERR *ne_net_write_int(NSOCK *sock, int i)
-{
- char buf[32];
-
- snprintf(buf, sizeof(buf), "%d,", i);
- return nerr_pass(ne_net_write(sock, buf, strlen(buf)));
-}
-
diff --git a/util/neo_net.h b/util/neo_net.h
deleted file mode 100644
index de8aaf9..0000000
--- a/util/neo_net.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#ifndef __NEO_NET_H_
-#define __NEO_NET_H_ 1
-
-__BEGIN_DECLS
-
-#define NET_BUFSIZE 4096
-
-typedef struct _neo_sock {
- int fd;
- int data_timeout;
- int conn_timeout;
-
- UINT32 remote_ip;
- int remote_port;
-
- /* incoming buffer */
- UINT8 ibuf[NET_BUFSIZE];
- int ib;
- int il;
-
- /* outbound buffer */
- UINT8 obuf[NET_BUFSIZE];
- int ol;
-} NSOCK;
-
-NEOERR *ne_net_listen(int port, int *fd);
-NEOERR *ne_net_accept(NSOCK **sock, int fd, int data_timeout);
-NEOERR *ne_net_connect(NSOCK **sock, const char *host, int port,
- int conn_timeout, int data_timeout);
-NEOERR *ne_net_close(NSOCK **sock);
-NEOERR *ne_net_read(NSOCK *sock, UINT8 *buf, int buflen);
-NEOERR *ne_net_read_line(NSOCK *sock, char **buf);
-NEOERR *ne_net_read_binary(NSOCK *sock, UINT8 **b, int *blen);
-NEOERR *ne_net_read_str_alloc(NSOCK *sock, char **s, int *len);
-NEOERR *ne_net_read_int(NSOCK *sock, int *i);
-NEOERR *ne_net_write(NSOCK *sock, const char *b, int blen);
-NEOERR *ne_net_write_line(NSOCK *sock, const char *s);
-NEOERR *ne_net_write_binary(NSOCK *sock, const char *b, int blen);
-NEOERR *ne_net_write_str(NSOCK *sock, const char *s);
-NEOERR *ne_net_write_int(NSOCK *sock, int i);
-NEOERR *ne_net_flush(NSOCK *sock);
-void ne_net_shutdown(void);
-
-__END_DECLS
-
-#endif /* __NEO_NET_H_ */
diff --git a/util/neo_rand.c b/util/neo_rand.c
deleted file mode 100644
index 1cd6b28..0000000
--- a/util/neo_rand.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#include "cs_config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <time.h>
-#include <string.h>
-#include "neo_misc.h"
-#include "neo_err.h"
-#include "neo_rand.h"
-#include "ulist.h"
-
-static int RandomInit = 0;
-
-void neo_seed_rand (long int seed)
-{
-#ifdef HAVE_DRAND48
- srand48(seed);
-#elif HAVE_RANDOM
- srandom(seed);
-#else
- srand(seed);
-#endif
- RandomInit = 1;
-}
-
-int neo_rand (int max)
-{
- int r;
-
- if (RandomInit == 0)
- {
- neo_seed_rand (time(NULL));
- }
-#ifdef HAVE_DRAND48
- r = drand48() * max;
-#elif HAVE_RANDOM
- r = random() * max;
-#else
- r = rand() * max;
-#endif
- return r;
-}
-
-int neo_rand_string (char *s, int max)
-{
- int size;
- int x = 0;
-
- size = neo_rand(max-1);
- for (x = 0; x < size; x++)
- {
- s[x] = (char)(32 + neo_rand(127-32));
- if (s[x] == '/') s[x] = ' ';
- }
- s[x] = '\0';
-
- return 0;
-}
-
-static ULIST *Words = NULL;
-
-int neo_rand_word (char *s, int max)
-{
- NEOERR *err;
- int x;
- char *word;
-
- if (Words == NULL)
- {
- FILE *fp;
- char buf[256];
-
- err = uListInit(&Words, 40000, 0);
- if (err)
- {
- nerr_log_error(err);
- return -1;
- }
- fp = fopen ("/usr/dict/words", "r");
- if (fp == NULL) {
- fp = fopen ("/usr/share/dict/words", "r");
- if (fp == NULL) {
- ne_warn("Unable to find dict/words file (looked in /usr/dict/words and /usr/share/dict/words)");
- return -1;
- }
- }
- while (fgets (buf, sizeof(buf), fp) != NULL)
- {
- x = strlen (buf);
- if (buf[x-1] == '\n')
- buf[x-1] = '\0';
- uListAppend(Words, strdup(buf));
- }
- fclose (fp);
- }
- x = neo_rand (uListLength(Words));
- uListGet(Words, x, (void *)&word);
- strncpy (s, word, max);
- s[max-1] = '\0';
-
- return 0;
-}
-
diff --git a/util/neo_rand.h b/util/neo_rand.h
deleted file mode 100644
index 2f962ed..0000000
--- a/util/neo_rand.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#ifndef __NEO_RAND_H_
-#define __NEO_RAND_H_ 1
-
-__BEGIN_DECLS
-
-void neo_seed_rand (long int seed);
-int neo_rand (int max);
-int neo_rand_string (char *s, int slen);
-int neo_rand_word (char *s, int slen);
-
-__END_DECLS
-
-#endif /* __NEO_RAND_H_ */
diff --git a/util/neo_server.c b/util/neo_server.c
deleted file mode 100644
index f940a0e..0000000
--- a/util/neo_server.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-/* Initial version based on multi-proc based server (like apache 1.x)
- *
- * Parts are:
- * 1) server Init
- * 2) sub-proc start
- * 3) sub-proc init
- * 4) sub-proc process request
- * 5) sub-proc cleanup
- * 6) server cleanup
- *
- * Parts 1 & 6 aren't part of the framework, and at this point, I don't
- * think I need to worry about 3 & 5 either, but maybe in the future.
- */
-
-#include "cs_config.h"
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <limits.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-
-#include "neo_misc.h"
-#include "neo_err.h"
-#include "neo_net.h"
-#include "ulocks.h"
-#include "neo_server.h"
-
-static NEOERR *nserver_child_loop(NSERVER *server, int num)
-{
- NEOERR *err = STATUS_OK, *clean_err;
- int loop = 0;
- NSOCK *child_sock;
-
- if (server->init_cb)
- {
- err = server->init_cb(server->data, num);
- if (err) return nerr_pass(err);
- }
-
- while (loop++ < server->num_requests)
- {
- err = fLock(server->accept_lock);
- if (err) break;
- err = ne_net_accept(&child_sock, server->server_fd, server->data_timeout);
- fUnlock(server->accept_lock);
- if (err) break;
- err = server->req_cb(server->data, num, child_sock);
- if (err)
- {
- ne_net_close(&child_sock);
- }
- else
- {
- err = ne_net_close(&child_sock);
- }
- nerr_log_error(err);
- nerr_ignore(&err);
- }
- ne_warn("nserver child loop handled %d connections", loop-1);
-
- if (server->clean_cb)
- {
- clean_err = server->clean_cb(server->data, num);
- if (clean_err)
- {
- nerr_log_error(clean_err);
- nerr_ignore(&clean_err);
- }
- }
-
- return nerr_pass(err);
-}
-
-static void ignore_pipe(void)
-{
- struct sigaction sa;
-
-
- memset(&sa, 0, sizeof(struct sigaction));
-
- sa.sa_handler = SIG_IGN;
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = SA_RESTART;
- sigaction(SIGPIPE, &sa, NULL);
-}
-
-/* Handle shutdown by accepting a TERM signal and then passing it to our
- * program group */
-static int ShutdownPending = 0;
-
-static void sig_term(int sig)
-{
- ShutdownPending = 1;
- ne_net_shutdown();
-}
-
-static void setup_term(void)
-{
- struct sigaction sa;
-
-
- memset(&sa, 0, sizeof(struct sigaction));
-
- sa.sa_handler = sig_term;
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = 0;
- sigaction(SIGTERM, &sa, NULL);
-}
-
-NEOERR *nserver_proc_start(NSERVER *server, BOOL debug)
-{
- NEOERR *err;
-
- if (server->req_cb == NULL)
- return nerr_raise(NERR_ASSERT, "nserver requires a request callback");
-
- ignore_pipe();
-
- setup_term();
-
- ShutdownPending = 0;
-
- err = fFind(&(server->accept_lock), server->lockfile);
- if (err && nerr_handle(&err, NERR_NOT_FOUND))
- {
- err = fCreate(&(server->accept_lock), server->lockfile);
- }
- if (err) return nerr_pass(err);
-
- do
- {
- err = ne_net_listen(server->port, &(server->server_fd));
- if (err) break;
-
- if (debug == TRUE)
- {
- err = nserver_child_loop(server, 0);
- break;
- }
- else
- {
- /* create children and restart them as necessary */
- pid_t child;
- int count, status;
-
- for (count = 0; count < server->num_children; count++)
- {
- child = fork();
- if (child == -1)
- {
- err = nerr_raise_errno(NERR_SYSTEM, "Unable to fork child");
- break;
- }
- if (!child)
- {
- err = nserver_child_loop(server, count);
- if (err) exit(-1);
- exit(0);
- }
- ne_warn("Starting child pid %d", child);
- }
- if (count < server->num_children) break;
- while (!ShutdownPending)
- {
- child = wait3(&status, 0, NULL);
- if (child == -1)
- {
- ne_warn("wait3 failed [%d] %s", errno, strerror(errno));
- continue;
- }
- if (WIFSTOPPED(status))
- {
- ne_warn("pid %d stopped on signal %d", child, WSTOPSIG(status));
- continue;
- }
- if (WIFEXITED(status))
- {
- /* at some point, we might do something here with the
- * particular exit value */
- ne_warn("pid %d exited, returned %d", child, WEXITSTATUS(status));
- }
- else if (WIFSIGNALED(status))
- {
- ne_warn("pid %d exited on signal %d", child, WTERMSIG(status));
- }
- count++;
-
- child = fork();
- if (child == -1)
- {
- err = nerr_raise_errno(NERR_SYSTEM, "Unable to fork child");
- break;
- }
- if (!child)
- {
- err = nserver_child_loop(server, count);
- if (err) exit(-1);
- exit(0);
- }
- ne_warn("Starting child pid %d", child);
- }
- /* At some point, we might want to actually maintain information
- * on our children, and then we can be more specific here in terms
- * of making sure they all shutdown... for now, fergitaboutit */
- if (ShutdownPending)
- {
- killpg(0, SIGTERM);
- }
- }
- }
- while (0);
-
- fDestroy(server->accept_lock);
- return nerr_pass(err);
-}
diff --git a/util/neo_server.h b/util/neo_server.h
deleted file mode 100644
index 97acf46..0000000
--- a/util/neo_server.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#ifndef __NEO_SERVER_H_
-#define __NEO_SERVER_H_ 1
-
-__BEGIN_DECLS
-
-/* hmm, this callback might need a mechanism for telling the child to
- * end... */
-typedef NEOERR *(*NSERVER_REQ_CB)(void *rock, int num, NSOCK *sock);
-typedef NEOERR *(*NSERVER_CB)(void *rock, int num);
-
-typedef struct _nserver {
- /* callbacks */
- NSERVER_CB init_cb;
- NSERVER_REQ_CB req_cb;
- NSERVER_CB clean_cb;
-
- void *data;
-
- int num_children;
- int num_requests;
-
- int port;
- int conn_timeout;
- int data_timeout;
-
- char lockfile[_POSIX_PATH_MAX];
-
- /* Internal data */
- int accept_lock;
- int server_fd;
-} NSERVER;
-
-NEOERR *nserver_proc_start(NSERVER *server, BOOL debug);
-
-__END_DECLS
-
-#endif /* __NEO_SERVER_H_ */
diff --git a/util/neo_str.c b/util/neo_str.c
deleted file mode 100644
index ea6a897..0000000
--- a/util/neo_str.c
+++ /dev/null
@@ -1,892 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#include "cs_config.h"
-
-#include <unistd.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdarg.h>
-#include <regex.h>
-#include "neo_misc.h"
-#include "neo_err.h"
-#include "neo_str.h"
-#include "ulist.h"
-
-#ifndef va_copy
-#ifdef __va_copy
-# define va_copy(dest,src) __va_copy(dest,src)
-#else
-# define va_copy(dest,src) ((dest) = (src))
-#endif
-#endif
-
-char *neos_strip (char *s)
-{
- int x;
-
- x = strlen(s) - 1;
- while (x>=0 && isspace(s[x])) s[x--] = '\0';
-
- while (*s && isspace(*s)) s++;
-
- return s;
-}
-
-char *neos_rstrip (char *s)
-{
- int n = strlen (s)-1;
-
- while (n >= 0 && isspace(s[n]))
- {
- s[n] = '\0';
- n--;
- }
-
- return s;
-}
-
-void neos_lower(char *s)
-{
- while(*s != 0) {
- *s = tolower(*s);
- s++;
- }
-}
-
-
-void string_init (STRING *str)
-{
- str->buf = NULL;
- str->len = 0;
- str->max = 0;
-}
-
-void string_clear (STRING *str)
-{
- if (str->buf != NULL)
- free(str->buf);
- string_init(str);
-}
-
-static NEOERR* string_check_length (STRING *str, int l)
-{
- if (str->buf == NULL)
- {
- if (l * 10 > 256)
- str->max = l * 10;
- else
- str->max = 256;
- str->buf = (char *) malloc (sizeof(char) * str->max);
- if (str->buf == NULL)
- return nerr_raise (NERR_NOMEM, "Unable to allocate render buf of size %d",
- str->max);
- /* ne_warn("Creating string %x at %d (%5.2fK)", str, str->max, (str->max / 1024.0)); */
- }
- else if (str->len + l >= str->max)
- {
- do
- {
- str->max *= 2;
- } while (str->len + l >= str->max);
- str->buf = (char *) realloc (str->buf, sizeof(char) * str->max);
- if (str->buf == NULL)
- return nerr_raise (NERR_NOMEM, "Unable to allocate STRING buf of size %d",
- str->max);
- /* ne_warn("Growing string %x to %d (%5.2fK)", str, str->max, (str->max / 1024.0)); */
- }
- return STATUS_OK;
-}
-
-NEOERR *string_set (STRING *str, const char *buf)
-{
- str->len = 0;
- return nerr_pass (string_append (str, buf));
-}
-
-NEOERR *string_append (STRING *str, const char *buf)
-{
- NEOERR *err;
- int l;
-
- l = strlen(buf);
- err = string_check_length (str, l);
- if (err != STATUS_OK) return nerr_pass (err);
- strcpy(str->buf + str->len, buf);
- str->len += l;
-
- return STATUS_OK;
-}
-
-NEOERR *string_appendn (STRING *str, const char *buf, int l)
-{
- NEOERR *err;
-
- err = string_check_length (str, l+1);
- if (err != STATUS_OK) return nerr_pass (err);
- memcpy(str->buf + str->len, buf, l);
- str->len += l;
- str->buf[str->len] = '\0';
-
- return STATUS_OK;
-}
-
-/* this is much more efficient with C99 snprintfs... */
-NEOERR *string_appendvf (STRING *str, const char *fmt, va_list ap)
-{
- NEOERR *err;
- char buf[4096];
- int bl, size;
- va_list tmp;
-
- va_copy(tmp, ap);
- /* determine length */
- size = sizeof (buf);
- bl = vsnprintf (buf, size, fmt, tmp);
- if (bl > -1 && bl < size)
- return string_appendn (str, buf, bl);
-
- /* Handle non-C99 snprintfs (requires extra malloc/free and copy) */
- if (bl == -1)
- {
- char *a_buf;
-
- va_copy(tmp, ap);
- a_buf = vnsprintf_alloc(size*2, fmt, tmp);
- if (a_buf == NULL)
- return nerr_raise(NERR_NOMEM,
- "Unable to allocate memory for formatted string");
- err = string_append(str, a_buf);
- free(a_buf);
- return nerr_pass(err);
- }
-
- err = string_check_length (str, bl+1);
- if (err != STATUS_OK) return nerr_pass (err);
- va_copy(tmp, ap);
- vsprintf (str->buf + str->len, fmt, tmp);
- str->len += bl;
- str->buf[str->len] = '\0';
-
- return STATUS_OK;
-}
-
-NEOERR *string_appendf (STRING *str, const char *fmt, ...)
-{
- NEOERR *err;
- va_list ap;
-
- va_start (ap, fmt);
- err = string_appendvf (str, fmt, ap);
- va_end (ap);
- return nerr_pass(err);
-}
-
-NEOERR *string_append_char (STRING *str, char c)
-{
- NEOERR *err;
- err = string_check_length (str, 1);
- if (err != STATUS_OK) return nerr_pass (err);
- str->buf[str->len] = c;
- str->buf[str->len + 1] = '\0';
- str->len += 1;
-
- return STATUS_OK;
-}
-
-void string_array_init (STRING_ARRAY *arr)
-{
- arr->entries = NULL;
- arr->count = 0;
- arr->max = 0;
-}
-
-NEOERR *string_array_split (ULIST **list, char *s, const char *sep,
- int max)
-{
- NEOERR *err;
- char *p, *n, *f;
- int sl;
- int x = 0;
-
- if (sep[0] == '\0')
- return nerr_raise (NERR_ASSERT, "separator must be at least one character");
-
- err = uListInit (list, 10, 0);
- if (err) return nerr_pass(err);
-
- sl = strlen(sep);
- p = (sl == 1) ? strchr (s, sep[0]) : strstr (s, sep);
- f = s;
- while (p != NULL)
- {
- if (x >= max) break;
- *p = '\0';
- n = strdup(f);
- *p = sep[0];
- if (n) err = uListAppend (*list, n);
- else err = nerr_raise(NERR_NOMEM,
- "Unable to allocate memory to split %s", s);
- if (err) goto split_err;
- f = p+sl;
- p = (sl == 1) ? strchr (f, sep[0]) : strstr (f, sep);
- x++;
- }
- /* Handle remainder */
- n = strdup(f);
- if (n) err = uListAppend (*list, n);
- else err = nerr_raise(NERR_NOMEM,
- "Unable to allocate memory to split %s", s);
- if (err) goto split_err;
- return STATUS_OK;
-
-split_err:
- uListDestroy(list, ULIST_FREE);
- return err;
-}
-
-void string_array_clear (STRING_ARRAY *arr)
-{
- int x;
-
- for (x = 0; x < arr->count; x++)
- {
- if (arr->entries[x] != NULL) free (arr->entries[x]);
- arr->entries[x] = NULL;
- }
- free (arr->entries);
- arr->entries = NULL;
- arr->count = 0;
-}
-
-/* Mostly used by vprintf_alloc for non-C99 compliant snprintfs,
- * this is like vsprintf_alloc except it takes a "suggested" size */
-int vnisprintf_alloc (char **buf, int start_size, const char *fmt, va_list ap)
-{
- int bl, size;
- va_list tmp;
-
- *buf = NULL;
- size = start_size;
-
- *buf = (char *) malloc (size * sizeof(char));
- if (*buf == NULL) return 0;
- while (1)
- {
- va_copy(tmp, ap);
- bl = vsnprintf (*buf, size, fmt, tmp);
- if (bl > -1 && bl < size)
- return bl;
- if (bl > -1)
- size = bl + 1;
- else
- size *= 2;
- *buf = (char *) realloc (*buf, size * sizeof(char));
- if (*buf == NULL) return 0;
- }
-}
-
-char *vnsprintf_alloc (int start_size, const char *fmt, va_list ap)
-{
- char *r;
- vnisprintf_alloc(&r, start_size, fmt, ap);
- return r;
-}
-
-/* This works better with a C99 compliant vsnprintf, but should work ok
- * with versions that return a -1 if it overflows the buffer */
-int visprintf_alloc (char **buf, const char *fmt, va_list ap)
-{
- char ibuf[4096];
- int bl, size;
- va_list tmp;
-
-/* PPC doesn't like you re-using a va_list... and it might not be
- * supposed to work at all */
- va_copy(tmp, ap);
-
- size = sizeof (ibuf);
- bl = vsnprintf (ibuf, sizeof (ibuf), fmt, tmp);
- if (bl > -1 && bl < size)
- {
- *buf = (char *) calloc(bl+1, sizeof(char));
- if (*buf == NULL) return 0;
- strncpy(*buf, ibuf, bl);
- return bl;
- }
-
- if (bl > -1)
- size = bl + 1;
- else
- size *= 2;
-
- return vnisprintf_alloc(buf, size, fmt, ap);
-}
-
-char *vsprintf_alloc (const char *fmt, va_list ap)
-{
- char *r;
- visprintf_alloc(&r, fmt, ap);
- return r;
-}
-
-/* technically, sprintf's can have null values, so we need to be able to
- * return a length also like real sprintf */
-int isprintf_alloc (char **buf, const char *fmt, ...)
-{
- va_list ap;
- int r;
-
- va_start (ap, fmt);
- r = visprintf_alloc (buf, fmt, ap);
- va_end (ap);
- return r;
-}
-
-char *sprintf_alloc (const char *fmt, ...)
-{
- va_list ap;
- char *r;
-
- va_start (ap, fmt);
- r = vsprintf_alloc (fmt, ap);
- va_end (ap);
- return r;
-}
-
-/* This is mostly just here for completeness, I doubt anyone would use
- * this (its more efficient (time-wise) if start_size is bigger than the
- * resulting string. Its less efficient than sprintf_alloc if we have a
- * C99 snprintf and it doesn't fit in start_size.
- * BTW: If you are really worried about the efficiency of these
- * functions, maybe you shouldn't be using them in the first place... */
-char *nsprintf_alloc (int start_size, const char *fmt, ...)
-{
- va_list ap;
- char *r;
-
- va_start (ap, fmt);
- r = vnsprintf_alloc (start_size, fmt, ap);
- va_end (ap);
- return r;
-}
-
-BOOL reg_search (const char *re, const char *str)
-{
- regex_t search_re;
- int errcode;
- char buf[256];
-
- if ((errcode = regcomp(&search_re, re, REG_ICASE | REG_EXTENDED | REG_NOSUB)))
- {
- regerror (errcode, &search_re, buf, sizeof(buf));
- ne_warn ("Unable to compile regex %s: %s", re, buf);
- return FALSE;
- }
- errcode = regexec (&search_re, str, 0, NULL, 0);
- regfree (&search_re);
- if (errcode == 0)
- return TRUE;
- return FALSE;
-}
-
-NEOERR *string_readline (STRING *str, FILE *fp)
-{
- NEOERR *err;
-
- /* minimum size for a readline is 256 above current position */
- err = string_check_length (str, str->len + 256);
- if (err != STATUS_OK) return nerr_pass (err);
-
- while (fgets(str->buf + str->len, str->max - str->len, fp) != NULL)
- {
- str->len = strlen(str->buf);
- if (str->buf[str->len-1] == '\n') break;
- err = string_check_length (str, str->len + 256);
- if (err != STATUS_OK) return nerr_pass (err);
- }
- return STATUS_OK;
-}
-
-NEOERR* neos_escape(UINT8 *buf, int buflen, char esc_char, const char *escape,
- char **esc)
-{
- int nl = 0;
- int l = 0;
- int x = 0;
- char *s;
- int match = 0;
-
- while (l < buflen)
- {
- if (buf[l] == esc_char)
- {
- nl += 2;
- }
- else
- {
- x = 0;
- while (escape[x])
- {
- if (escape[x] == buf[l])
- {
- nl +=2;
- break;
- }
- x++;
- }
- }
- nl++;
- l++;
- }
-
- s = (char *) malloc (sizeof(char) * (nl + 1));
- if (s == NULL)
- return nerr_raise (NERR_NOMEM, "Unable to allocate memory to escape %s",
- buf);
-
- nl = 0; l = 0;
- while (l < buflen)
- {
- match = 0;
- if (buf[l] == esc_char)
- {
- match = 1;
- }
- else
- {
- x = 0;
- while (escape[x])
- {
- if (escape[x] == buf[l])
- {
- match = 1;
- break;
- }
- x++;
- }
- }
- if (match)
- {
- s[nl++] = esc_char;
- s[nl++] = "0123456789ABCDEF"[buf[l] / 16];
- s[nl++] = "0123456789ABCDEF"[buf[l] % 16];
- l++;
- }
- else
- {
- s[nl++] = buf[l++];
- }
- }
- s[nl] = '\0';
-
- *esc = s;
- return STATUS_OK;
-}
-
-UINT8 *neos_unescape (UINT8 *s, int buflen, char esc_char)
-{
- int i = 0, o = 0;
-
- if (s == NULL) return s;
- while (i < buflen)
- {
- if (s[i] == esc_char && (i+2 < buflen) &&
- isxdigit(s[i+1]) && isxdigit(s[i+2]))
- {
- UINT8 num;
- num = (s[i+1] >= 'A') ? ((s[i+1] & 0xdf) - 'A') + 10 : (s[i+1] - '0');
- num *= 16;
- num += (s[i+2] >= 'A') ? ((s[i+2] & 0xdf) - 'A') + 10 : (s[i+2] - '0');
- s[o++] = num;
- i+=3;
- }
- else {
- s[o++] = s[i++];
- }
- }
- if (i && o) s[o] = '\0';
- return s;
-}
-
-char *repr_string_alloc (const char *s)
-{
- int l,x,i;
- int nl = 0;
- char *rs;
-
- if (s == NULL)
- {
- return strdup("NULL");
- }
-
- l = strlen(s);
- for (x = 0; x < l; x++)
- {
- if (isprint(s[x]) && s[x] != '"' && s[x] != '\\')
- {
- nl++;
- }
- else
- {
- if (s[x] == '\n' || s[x] == '\t' || s[x] == '\r' || s[x] == '"' ||
- s[x] == '\\')
- {
- nl += 2;
- }
- else nl += 4;
- }
- }
-
- rs = (char *) malloc ((nl+3) * sizeof(char));
- if (rs == NULL)
- return NULL;
-
- i = 0;
- rs[i++] = '"';
- for (x = 0; x < l; x++)
- {
- if (isprint(s[x]) && s[x] != '"' && s[x] != '\\')
- {
- rs[i++] = s[x];
- }
- else
- {
- rs[i++] = '\\';
- switch (s[x])
- {
- case '\n':
- rs[i++] = 'n';
- break;
- case '\t':
- rs[i++] = 't';
- break;
- case '\r':
- rs[i++] = 'r';
- break;
- case '"':
- rs[i++] = '"';
- break;
- case '\\':
- rs[i++] = '\\';
- break;
- default:
- sprintf(&(rs[i]), "%03o", (s[x] & 0377));
- i += 3;
- break;
- }
- }
- }
- rs[i++] = '"';
- rs[i] = '\0';
- return rs;
-}
-
-// List of all characters that must be escaped
-// List based on http://www.blooberry.com/indexdot/html/topics/urlencoding.htm
-static char EscapedChars[] = "$&+,/:;=?@ \"<>#%{}|\\^~[]`'";
-
-// Check if a single character needs to be escaped
-static BOOL is_reserved_char(char c)
-{
- int i = 0;
-
- if (c < 32 || c > 122) {
- return TRUE;
- } else {
- while (EscapedChars[i]) {
- if (c == EscapedChars[i]) {
- return TRUE;
- }
- ++i;
- }
- }
- return FALSE;
-}
-
-NEOERR *neos_js_escape (const char *in, char **esc)
-{
- int nl = 0;
- int l = 0;
- unsigned char *buf = (unsigned char *)in;
- unsigned char *s;
-
- while (buf[l])
- {
- if (buf[l] == '/' || buf[l] == '"' || buf[l] == '\'' ||
- buf[l] == '\\' || buf[l] == '>' || buf[l] == '<' ||
- buf[l] == '&' || buf[l] == ';' || buf[l] < 32)
- {
- nl += 3;
- }
- nl++;
- l++;
- }
-
- s = (unsigned char *) malloc (sizeof(unsigned char) * (nl + 1));
- if (s == NULL)
- return nerr_raise (NERR_NOMEM, "Unable to allocate memory to escape %s",
- buf);
-
- nl = 0; l = 0;
- while (buf[l])
- {
- if (buf[l] == '/' || buf[l] == '"' || buf[l] == '\'' ||
- buf[l] == '\\' || buf[l] == '>' || buf[l] == '<' ||
- buf[l] == '&' || buf[l] == ';' || buf[l] < 32)
- {
- s[nl++] = '\\';
- s[nl++] = 'x';
- s[nl++] = "0123456789ABCDEF"[(buf[l] >> 4) & 0xF];
- s[nl++] = "0123456789ABCDEF"[buf[l] & 0xF];
- l++;
- }
- else
- {
- s[nl++] = buf[l++];
- }
- }
- s[nl] = '\0';
-
- *esc = (char *)s;
- return STATUS_OK;
-}
-
-
-NEOERR *neos_url_escape (const char *in, char **esc,
- const char *other)
-{
- int nl = 0;
- int l = 0;
- int x = 0;
- unsigned char *buf = (unsigned char *)in;
- unsigned char *uother = (unsigned char *)other;
- unsigned char *s;
- int match = 0;
-
- while (buf[l])
- {
- if (is_reserved_char(buf[l]))
- {
- nl += 2;
- }
- else if (uother)
- {
- x = 0;
- while (uother[x])
- {
- if (uother[x] == buf[l])
- {
- nl +=2;
- break;
- }
- x++;
- }
- }
- nl++;
- l++;
- }
-
- s = (unsigned char *) malloc (sizeof(unsigned char) * (nl + 1));
- if (s == NULL)
- return nerr_raise (NERR_NOMEM, "Unable to allocate memory to escape %s",
- buf);
-
- nl = 0; l = 0;
- while (buf[l])
- {
- match = 0;
- if (buf[l] == ' ')
- {
- s[nl++] = '+';
- l++;
- }
- else
- {
- if (is_reserved_char(buf[l]))
- {
- match = 1;
- }
- else if (uother)
- {
- x = 0;
- while (uother[x])
- {
- if (uother[x] == buf[l])
- {
- match = 1;
- break;
- }
- x++;
- }
- }
- if (match)
- {
- s[nl++] = '%';
- s[nl++] = "0123456789ABCDEF"[buf[l] / 16];
- s[nl++] = "0123456789ABCDEF"[buf[l] % 16];
- l++;
- }
- else
- {
- s[nl++] = buf[l++];
- }
- }
- }
- s[nl] = '\0';
-
- *esc = (char *)s;
- return STATUS_OK;
-}
-
-NEOERR *neos_html_escape (const char *src, int slen,
- char **out)
-{
- NEOERR *err = STATUS_OK;
- STRING out_s;
- int x;
- char *ptr;
-
- string_init(&out_s);
- err = string_append (&out_s, "");
- if (err) return nerr_pass (err);
- *out = NULL;
-
- x = 0;
- while (x < slen)
- {
- ptr = strpbrk(src + x, "&<>\"'\r");
- if (ptr == NULL || (ptr-src >= slen))
- {
- err = string_appendn (&out_s, src + x, slen-x);
- x = slen;
- }
- else
- {
- err = string_appendn (&out_s, src + x, (ptr - src) - x);
- if (err != STATUS_OK) break;
- x = ptr - src;
- if (src[x] == '&')
- err = string_append (&out_s, "&amp;");
- else if (src[x] == '<')
- err = string_append (&out_s, "&lt;");
- else if (src[x] == '>')
- err = string_append (&out_s, "&gt;");
- else if (src[x] == '"')
- err = string_append (&out_s, "&quot;");
- else if (src[x] == '\'')
- err = string_append (&out_s, "&#39;");
- else if (src[x] != '\r')
- err = nerr_raise (NERR_ASSERT, "src[x] == '%c'", src[x]);
- x++;
- }
- if (err != STATUS_OK) break;
- }
- if (err)
- {
- string_clear (&out_s);
- return nerr_pass (err);
- }
- *out = out_s.buf;
- return STATUS_OK;
-}
-
-char *URL_PROTOCOLS[] = {"http://", "https://", "ftp://", "mailto:"};
-
-NEOERR *neos_url_validate (const char *in, char **esc)
-{
- NEOERR *err = STATUS_OK;
- STRING out_s;
- int valid = 0;
- size_t i;
- size_t inlen;
- int num_protocols = sizeof(URL_PROTOCOLS) / sizeof(char*);
- void* slashpos;
- void* colonpos;
-
- inlen = strlen(in);
-
- /*
- * <a href="//b:80"> or <a href="a/b:80"> are allowed by browsers
- * and ":" is treated as part of the path, while
- * <a href="www.google.com:80"> is an invalid url
- * and ":" is treated as a scheme separator.
- *
- * Hence allow for ":" in the path part of a url (after /)
- */
- slashpos = memchr(in, '/', inlen);
- if (slashpos == NULL) {
- i = inlen;
- }
- else {
- i = (size_t)((char*)slashpos - in);
- }
-
- colonpos = memchr(in, ':', i);
-
- if (colonpos == NULL) {
- // no scheme in 'in': so this is a relative url
- valid = 1;
- }
- else {
- for (i = 0; i < num_protocols; i++)
- {
- if ((inlen >= strlen(URL_PROTOCOLS[i])) &&
- strncmp(in, URL_PROTOCOLS[i], strlen(URL_PROTOCOLS[i])) == 0) {
- // 'in' starts with one of the allowed protocols
- valid = 1;
- break;
- }
-
- }
- }
-
- if (valid)
- return neos_html_escape(in, inlen, esc);
-
- // 'in' contains an unsupported scheme, replace with '#'
- string_init(&out_s);
- err = string_append (&out_s, "#");
- if (err) return nerr_pass (err);
-
- *esc = out_s.buf;
- return STATUS_OK;
-
-}
-
-NEOERR *neos_var_escape (NEOS_ESCAPE context,
- const char *in,
- char **esc)
-{
-
- /* Just dup and return if we do nothing. */
- if (context == NEOS_ESCAPE_NONE ||
- context == NEOS_ESCAPE_FUNCTION)
- {
- *esc = strdup(in);
- return STATUS_OK;
- }
-
- /* Now we escape based on context. This is the order of precedence:
- * url > script > style > html
- */
- if (context & NEOS_ESCAPE_URL)
- return nerr_pass(neos_url_escape(in, esc, NULL));
- else if (context & NEOS_ESCAPE_SCRIPT)
- return nerr_pass(neos_js_escape(in, esc));
- else if (context & NEOS_ESCAPE_HTML)
- return nerr_pass(neos_html_escape(in, strlen(in), esc));
-
- return nerr_raise(NERR_ASSERT, "unknown escape context supplied: %d",
- context);
-}
diff --git a/util/neo_str.h b/util/neo_str.h
deleted file mode 100644
index 7594e71..0000000
--- a/util/neo_str.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#ifndef __NEO_STR_H_
-#define __NEO_STR_H_ 1
-
-__BEGIN_DECLS
-
-#include <stdarg.h>
-#include <stdio.h>
-#include "util/neo_misc.h"
-
-/* This modifies the string its called with by replacing all the white
- * space on the end with \0, and returns a pointer to the first
- * non-white space character in the string
- */
-char *neos_strip (char *s);
-
-void neos_lower (char *s);
-
-char *sprintf_alloc (const char *fmt, ...) ATTRIBUTE_PRINTF(1,2);
-char *nsprintf_alloc (int start_size, const char *fmt, ...) ATTRIBUTE_PRINTF(2,3);
-char *vsprintf_alloc (const char *fmt, va_list ap);
-char *vnsprintf_alloc (int start_size, const char *fmt, va_list ap);
-
-/* Versions of the above which actually return a length, necessary if
- * you expect embedded NULLs */
-int vnisprintf_alloc (char **buf, int start_size, const char *fmt, va_list ap);
-int visprintf_alloc (char **buf, const char *fmt, va_list ap);
-int isprintf_alloc (char **buf, const char *fmt, ...) ATTRIBUTE_PRINTF(2,3);
-
-typedef struct _string
-{
- char *buf;
- int len;
- int max;
-} STRING;
-
-typedef struct _string_array
-{
- char **entries;
- int count;
- int max;
-} STRING_ARRAY;
-
-/* At some point, we should add the concept of "max len" to these so we
- * can't get DoS'd by someone sending us a line without an end point,
- * etc. */
-void string_init (STRING *str);
-NEOERR *string_set (STRING *str, const char *buf);
-NEOERR *string_append (STRING *str, const char *buf);
-NEOERR *string_appendn (STRING *str, const char *buf, int l);
-NEOERR *string_append_char (STRING *str, char c);
-NEOERR *string_appendf (STRING *str, const char *fmt, ...) ATTRIBUTE_PRINTF(2,3);
-NEOERR *string_appendvf (STRING *str, const char *fmt, va_list ap);
-NEOERR *string_readline (STRING *str, FILE *fp);
-void string_clear (STRING *str);
-
-/* typedef struct _ulist ULIST; */
-#include "util/ulist.h"
-/* s is not const because we actually temporarily modify the string
- * during split */
-NEOERR *string_array_split (ULIST **list, char *s, const char *sep,
- int max);
-
-BOOL reg_search (const char *re, const char *str);
-
-/* NEOS_ESCAPE details the support escape contexts/modes handled
- * by various NEOS helper methods and reused in CS itself. */
-typedef enum
-{
- NEOS_ESCAPE_UNDEF = 0, /* Used to force eval-time checking */
- NEOS_ESCAPE_NONE = 1<<0,
- NEOS_ESCAPE_HTML = 1<<1,
- NEOS_ESCAPE_SCRIPT = 1<<2,
- NEOS_ESCAPE_URL = 1<<3,
- NEOS_ESCAPE_FUNCTION = 1<<4 /* Special case used to override the others */
-} NEOS_ESCAPE;
-
-NEOERR* neos_escape(UINT8 *buf, int buflen, char esc_char, const char *escape,
- char **esc);
-UINT8 *neos_unescape (UINT8 *s, int buflen, char esc_char);
-
-char *repr_string_alloc (const char *s);
-
-/* This is the "super" escape call which will call the proper helper
- * variable escape function based on the passed in context. */
-NEOERR *neos_var_escape (NEOS_ESCAPE context,
- const char *in,
- char **esc);
-
-/* Generic data escaping helper functions used by neos_contextual_escape
- * and cs built-ins. */
-NEOERR *neos_url_escape (const char *in, char **esc,
- const char *other);
-
-NEOERR *neos_js_escape (const char *in, char **esc);
-
-NEOERR *neos_html_escape (const char *src, int slen,
- char **out);
-
-NEOERR *neos_url_validate (const char *in, char **esc);
-
-__END_DECLS
-
-#endif /* __NEO_STR_H_ */
diff --git a/util/osdep.h b/util/osdep.h
deleted file mode 100644
index cde535e..0000000
--- a/util/osdep.h
+++ /dev/null
@@ -1,44 +0,0 @@
-
-#ifndef __OSDEP_H__
-#define __OSDEP_H__ 1
-
-
-#ifdef __WINDOWS_GCC__
-
-#include <stdlib.h>
-#include <stdarg.h>
-
-#define __BEGIN_DECLS
-#define __END_DECLS
-#define _POSIX_PATH_MAX 255
-
-#define S_IXGRP S_IXUSR
-#define S_IWGRP S_IWUSR
-#define S_IRGRP S_IRUSR
-#define S_IROTH S_IRUSR
-#define S_IWOTH S_IWUSR
-
-#define HAVE_STDARG_H 1
-#define HAVE_STRING_H 1
-#undef HAVE_GMTOFF
-
-
-
-int snprintf (char *str, size_t count, const char *fmt, ...);
-int vsnprintf (char *str, size_t count, const char *fmt, va_list arg);
-
-int mkstemp(char *path);
-
-#define os_random rand
-
-#else // UNIX......
-
-#define os_random random
-
-#define HAVE_PTHREAD 1
-
-#endif
-
-
-
-#endif // __OSDEP_H__
diff --git a/util/rcfs.c b/util/rcfs.c
deleted file mode 100644
index 13dfefb..0000000
--- a/util/rcfs.c
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-/*
- * revision-controlled file system (RCFS) with meta-info storage
- */
-
-#include "cs_config.h"
-
-#include <limits.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <dirent.h>
-
-#include "util/neo_misc.h"
-#include "util/neo_err.h"
-#include "util/neo_files.h"
-#include "util/neo_hdf.h"
-#include "util/ulocks.h"
-#include "rcfs.h"
-
-NEOERR * rcfs_meta_load (const char *path, HDF **meta)
-{
- NEOERR *err;
- char fpath[_POSIX_PATH_MAX];
- HDF *m;
-
- snprintf (fpath, sizeof(fpath), "%s,log", path);
-
- err = hdf_init (&m);
- if (err) return nerr_pass (err);
- err = hdf_read_file (m, fpath);
- if (err)
- {
- hdf_destroy (&m);
- return nerr_pass (err);
- }
- *meta = m;
- return STATUS_OK;
-}
-
-static NEOERR * _meta_save (const char *path, HDF *meta)
-{
- NEOERR *err;
- char ftmp[_POSIX_PATH_MAX];
- char fpath[_POSIX_PATH_MAX];
-
- snprintf (ftmp, sizeof(ftmp), "%s,log.tmp", path);
- snprintf (fpath, sizeof(fpath), "%s,log", path);
-
- err = hdf_write_file (meta, ftmp);
- if (err) return nerr_pass (err);
- if (rename (ftmp, fpath) == -1)
- {
- unlink (ftmp);
- return nerr_raise_errno (NERR_IO, "Unable to rename file %s", ftmp);
- }
-
- return STATUS_OK;
-}
-
-NEOERR * rcfs_meta_save (const char *path, HDF *meta)
-{
- NEOERR *err;
- int lock;
- HDF *m;
-
- err = rcfs_lock (path, &lock);
- if (err) return nerr_pass (err);
- do
- {
- err = rcfs_meta_load (path, &m);
- if (err) break;
- err = hdf_copy (m, "Meta", meta);
- if (err) break;
- err = _meta_save (path, m);
- } while (0);
-
- rcfs_unlock (lock);
- return nerr_pass (err);
-}
-
-/* load a specified version of the file, version -1 is latest */
-NEOERR * rcfs_load (const char *path, int version, char **data)
-{
- NEOERR *err;
- char fpath[_POSIX_PATH_MAX];
-
- if (version == -1)
- {
- HDF *meta, *vers;
- int x;
-
- err = rcfs_meta_load (path, &meta);
- if (err) return nerr_pass (err);
- for (vers = hdf_get_child (meta, "Versions");
- vers;
- vers = hdf_obj_next (vers))
- {
- x = atoi (hdf_obj_name (vers));
- if (x > version) version = x;
- }
- hdf_destroy (&meta);
- }
- snprintf (fpath, sizeof (fpath), "%s,%d", path, version);
- err = ne_load_file (fpath, data);
- return nerr_pass (err);
-}
-
-NEOERR * rcfs_save (const char *path, const char *data, const char *user,
- const char *log)
-{
- NEOERR *err;
- HDF *meta = NULL, *vers;
- char fpath[_POSIX_PATH_MAX];
- char buf[256];
- int version = 0;
- int fd;
- int lock;
- int x, l, w;
-
- err = rcfs_lock (path, &lock);
- if (err) return nerr_pass (err);
- do
- {
- err = rcfs_meta_load (path, &meta);
- if (err && nerr_handle (&err, NERR_NOT_FOUND))
- {
- /* new file! */
- err = hdf_init (&meta);
- }
- if (err) return nerr_pass (err);
- for (vers = hdf_get_child (meta, "Versions");
- vers;
- vers = hdf_obj_next (vers))
- {
- x = atoi (hdf_obj_name (vers));
- if (x > version) version = x;
- }
-
- /* new version */
- version++;
- snprintf (fpath, sizeof (fpath), "%s,%d", path, version);
- fd = open (fpath, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
- if (fd == -1)
- {
- err = nerr_raise_errno (NERR_IO, "Unable to create file %s", fpath);
- break;
- }
- l = strlen(data);
- w = write (fd, data, l);
- if (w != l)
- {
- err = nerr_raise_errno (NERR_IO, "Unable to write file %s", fpath);
- close (fd);
- break;
- }
- close (fd);
- snprintf (buf, sizeof(buf), "Versions.%d.Log", version);
- err = hdf_set_value (meta, buf, log);
- if (err) break;
- snprintf (buf, sizeof(buf), "Versions.%d.User", version);
- err = hdf_set_value (meta, buf, user);
- if (err) break;
- snprintf (buf, sizeof(buf), "Versions.%d.Date", version);
- err = hdf_set_int_value (meta, buf, ne_timef());
- if (err) break;
- err = _meta_save (path, meta);
- } while (0);
-
- rcfs_unlock (lock);
- hdf_destroy (&meta);
- return nerr_pass (err);
-}
-
-NEOERR * rcfs_lock (const char *path, int *lock)
-{
- NEOERR *err;
- char fpath[_POSIX_PATH_MAX];
-
- snprintf (fpath, sizeof (fpath), "%s,lock", path);
- err = fCreate (lock, fpath);
- if (err) return nerr_pass (err);
- err = fLock (*lock);
- if (err)
- {
- fDestroy (*lock);
- return nerr_pass (err);
- }
- return STATUS_OK;
-}
-
-void rcfs_unlock (int lock)
-{
- fUnlock (lock);
- fDestroy (lock);
-}
-
-NEOERR * rcfs_listdir (const char *path, ULIST **list)
-{
- NEOERR *err;
- DIR *dp;
- ULIST *files;
- struct dirent *de;
- int l;
- char *f;
-
- *list = NULL;
- err = uListInit (&files, 10, 0);
- if (err) return nerr_pass (err);
- dp = opendir(path);
- if (dp == NULL)
- {
- uListDestroy(&files, ULIST_FREE);
- if (errno == ENOENT)
- return nerr_raise (NERR_NOT_FOUND, "Directory %s doesn't exist", path);
- return nerr_raise_errno (NERR_IO, "Unable to open directory %s", path);
- }
- while ((de = readdir (dp)) != NULL)
- {
- l = strlen (de->d_name);
- if (l>4 && !strcmp (de->d_name+l-4, ",log"))
- {
- f = (char *) malloc ((l-3) * sizeof(char));
- if (f == NULL)
- {
- uListDestroy (&files, ULIST_FREE);
- closedir(dp);
- return nerr_raise (NERR_NOMEM,
- "Unable to allocate memory for filename %s", de->d_name);
- }
- strncpy (f, de->d_name, l-4);
- f[l-4] = '\0';
- err = uListAppend (files, f);
- if (err)
- {
- free (f);
- uListDestroy (&files, ULIST_FREE);
- closedir(dp);
- return nerr_pass (err);
- }
- }
- }
- *list = files;
- closedir(dp);
-
- return STATUS_OK;
-}
-
diff --git a/util/rcfs.h b/util/rcfs.h
deleted file mode 100644
index 81b033a..0000000
--- a/util/rcfs.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-/*
- * revision-controlled file system (RCFS) with meta-info storage
- */
-#ifndef __RCFS_H_
-#define __RCFS_H_ 1
-
-typedef struct _rcfs RCFS;
-
-NEOERR * rcfs_init (RCFS **rcfs);
-NEOERR * rcfs_destroy (RCFS **rcfs);
-
-NEOERR * rcfs_load (const char *path, int version, char **data);
-NEOERR * rcfs_save (const char *path, const char *data, const char *user,
- const char *log);
-NEOERR * rcfs_lock (const char *path, int *lock);
-void rcfs_unlock (int lock);
-NEOERR * rcfs_meta_load (const char *path, HDF **meta);
-NEOERR * rcfs_meta_save (const char *path, HDF *meta);
-NEOERR * rcfs_listdir (const char *path, ULIST **list);
-NEOERR * rcfs_link (const char *src_path, const char *dest_path);
-NEOERR * rcfs_unlink (const char *path);
-
-#endif /* __RCFS_H_ */
diff --git a/util/regex/regex.c b/util/regex/regex.c
deleted file mode 100644
index a95438f..0000000
--- a/util/regex/regex.c
+++ /dev/null
@@ -1,5520 +0,0 @@
-/* Extended regular expression matching and search library, version
- 0.12. (Implements POSIX draft P10003.2/D11.2, except for
- internationalization features.)
-
- Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- USA. */
-
-/* AIX requires this to be the first thing in the file. */
-#if defined (_AIX) && !defined (REGEX_MALLOC)
- #pragma alloca
-#endif
-
-#undef _GNU_SOURCE
-#define _GNU_SOURCE
-
-#include "cs_config.h"
-#include "util/osdep.h"
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-/* We need this for `regex.h', and perhaps for the Emacs include files. */
-#include <sys/types.h>
-
-/* This is for other GNU distributions with internationalized messages. */
-#if HAVE_LIBINTL_H || defined (_LIBC)
-# include <libintl.h>
-#else
-# define gettext(msgid) (msgid)
-#endif
-
-#ifndef gettext_noop
-/* This define is so xgettext can find the internationalizable
- strings. */
-#define gettext_noop(String) String
-#endif
-
-/* The `emacs' switch turns on certain matching commands
- that make sense only in Emacs. */
-#ifdef emacs
-
-#include "lisp.h"
-#include "buffer.h"
-#include "syntax.h"
-
-#else /* not emacs */
-
-/* If we are not linking with Emacs proper,
- we can't use the relocating allocator
- even if config.h says that we can. */
-#undef REL_ALLOC
-
-#if defined (STDC_HEADERS) || defined (_LIBC)
-#include <stdlib.h>
-#else
-char *malloc ();
-char *realloc ();
-#endif
-
-/* When used in Emacs's lib-src, we need to get bzero and bcopy somehow.
- If nothing else has been done, use the method below. */
-#ifdef INHIBIT_STRING_HEADER
-#if !(defined (HAVE_BZERO) && defined (HAVE_BCOPY))
-#if !defined (bzero) && !defined (bcopy)
-#undef INHIBIT_STRING_HEADER
-#endif
-#endif
-#endif
-
-/* This is the normal way of making sure we have a bcopy and a bzero.
- This is used in most programs--a few other programs avoid this
- by defining INHIBIT_STRING_HEADER. */
-#ifndef INHIBIT_STRING_HEADER
-#if defined (HAVE_STRING_H) || defined (STDC_HEADERS) || defined (_LIBC)
-#include <string.h>
-#ifndef bcmp
-#define bcmp(s1, s2, n) memcmp ((s1), (s2), (n))
-#endif
-#ifndef bcopy
-#define bcopy(s, d, n) memcpy ((d), (s), (n))
-#endif
-#ifndef bzero
-#define bzero(s, n) memset ((s), 0, (n))
-#endif
-#else
-#include <strings.h>
-#endif
-#endif
-
-/* Define the syntax stuff for \<, \>, etc. */
-
-/* This must be nonzero for the wordchar and notwordchar pattern
- commands in re_match_2. */
-#ifndef Sword
-#define Sword 1
-#endif
-
-#ifdef SWITCH_ENUM_BUG
-#define SWITCH_ENUM_CAST(x) ((int)(x))
-#else
-#define SWITCH_ENUM_CAST(x) (x)
-#endif
-
-#ifdef SYNTAX_TABLE
-
-extern char *re_syntax_table;
-
-#else /* not SYNTAX_TABLE */
-
-/* How many characters in the character set. */
-#define CHAR_SET_SIZE 256
-
-static char re_syntax_table[CHAR_SET_SIZE];
-
-static void
-init_syntax_once ()
-{
- register int c;
- static int done = 0;
-
- if (done)
- return;
-
- bzero (re_syntax_table, sizeof re_syntax_table);
-
- for (c = 'a'; c <= 'z'; c++)
- re_syntax_table[c] = Sword;
-
- for (c = 'A'; c <= 'Z'; c++)
- re_syntax_table[c] = Sword;
-
- for (c = '0'; c <= '9'; c++)
- re_syntax_table[c] = Sword;
-
- re_syntax_table['_'] = Sword;
-
- done = 1;
-}
-
-#endif /* not SYNTAX_TABLE */
-
-#define SYNTAX(c) re_syntax_table[c]
-
-#endif /* not emacs */
-
-/* Get the interface, including the syntax bits. */
-#include "regex.h"
-
-/* isalpha etc. are used for the character classes. */
-#include <ctype.h>
-
-/* Jim Meyering writes:
-
- "... Some ctype macros are valid only for character codes that
- isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when
- using /bin/cc or gcc but without giving an ansi option). So, all
- ctype uses should be through macros like ISPRINT... If
- STDC_HEADERS is defined, then autoconf has verified that the ctype
- macros don't need to be guarded with references to isascii. ...
- Defining IN_CTYPE_DOMAIN to 1 should let any compiler worth its salt
- eliminate the && through constant folding." */
-
-#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
-#define IN_CTYPE_DOMAIN(c) 1
-#else
-#define IN_CTYPE_DOMAIN(c) isascii(c)
-#endif
-
-#ifdef isblank
-#define ISBLANK(c) (IN_CTYPE_DOMAIN (c) && isblank (c))
-#else
-#define ISBLANK(c) ((c) == ' ' || (c) == '\t')
-#endif
-#ifdef isgraph
-#define ISGRAPH(c) (IN_CTYPE_DOMAIN (c) && isgraph (c))
-#else
-#define ISGRAPH(c) (IN_CTYPE_DOMAIN (c) && isprint (c) && !isspace (c))
-#endif
-
-#define ISPRINT(c) (IN_CTYPE_DOMAIN (c) && isprint (c))
-#define ISDIGIT(c) (IN_CTYPE_DOMAIN (c) && isdigit (c))
-#define ISALNUM(c) (IN_CTYPE_DOMAIN (c) && isalnum (c))
-#define ISALPHA(c) (IN_CTYPE_DOMAIN (c) && isalpha (c))
-#define ISCNTRL(c) (IN_CTYPE_DOMAIN (c) && iscntrl (c))
-#define ISLOWER(c) (IN_CTYPE_DOMAIN (c) && islower (c))
-#define ISPUNCT(c) (IN_CTYPE_DOMAIN (c) && ispunct (c))
-#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c))
-#define ISUPPER(c) (IN_CTYPE_DOMAIN (c) && isupper (c))
-#define ISXDIGIT(c) (IN_CTYPE_DOMAIN (c) && isxdigit (c))
-
-#ifndef NULL
-#define NULL (void *)0
-#endif
-
-/* We remove any previous definition of `SIGN_EXTEND_CHAR',
- since ours (we hope) works properly with all combinations of
- machines, compilers, `char' and `unsigned char' argument types.
- (Per Bothner suggested the basic approach.) */
-#undef SIGN_EXTEND_CHAR
-#if __STDC__
-#define SIGN_EXTEND_CHAR(c) ((signed char) (c))
-#else /* not __STDC__ */
-/* As in Harbison and Steele. */
-#define SIGN_EXTEND_CHAR(c) ((((unsigned char) (c)) ^ 128) - 128)
-#endif
-
-/* Should we use malloc or alloca? If REGEX_MALLOC is not defined, we
- use `alloca' instead of `malloc'. This is because using malloc in
- re_search* or re_match* could cause memory leaks when C-g is used in
- Emacs; also, malloc is slower and causes storage fragmentation. On
- the other hand, malloc is more portable, and easier to debug.
-
- Because we sometimes use alloca, some routines have to be macros,
- not functions -- `alloca'-allocated space disappears at the end of the
- function it is called in. */
-
-#ifdef REGEX_MALLOC
-
-#define REGEX_ALLOCATE malloc
-#define REGEX_REALLOCATE(source, osize, nsize) realloc (source, nsize)
-#define REGEX_FREE free
-
-#else /* not REGEX_MALLOC */
-
-/* Emacs already defines alloca, sometimes. */
-#ifndef alloca
-
-/* Make alloca work the best possible way. */
-#ifdef __GNUC__
-#define alloca __builtin_alloca
-#else /* not __GNUC__ */
-#if HAVE_ALLOCA_H
-#include <alloca.h>
-#else /* not __GNUC__ or HAVE_ALLOCA_H */
-#if 0 /* It is a bad idea to declare alloca. We always cast the result. */
-#ifndef _AIX /* Already did AIX, up at the top. */
-char *alloca ();
-#endif /* not _AIX */
-#endif
-#endif /* not HAVE_ALLOCA_H */
-#endif /* not __GNUC__ */
-
-#endif /* not alloca */
-
-#define REGEX_ALLOCATE alloca
-
-/* Assumes a `char *destination' variable. */
-#define REGEX_REALLOCATE(source, osize, nsize) \
- (destination = (char *) alloca (nsize), \
- bcopy (source, destination, osize), \
- destination)
-
-/* No need to do anything to free, after alloca. */
-#define REGEX_FREE(arg) ((void)0) /* Do nothing! But inhibit gcc warning. */
-
-#endif /* not REGEX_MALLOC */
-
-/* Define how to allocate the failure stack. */
-
-#if defined (REL_ALLOC) && defined (REGEX_MALLOC)
-
-#define REGEX_ALLOCATE_STACK(size) \
- r_alloc (&failure_stack_ptr, (size))
-#define REGEX_REALLOCATE_STACK(source, osize, nsize) \
- r_re_alloc (&failure_stack_ptr, (nsize))
-#define REGEX_FREE_STACK(ptr) \
- r_alloc_free (&failure_stack_ptr)
-
-#else /* not using relocating allocator */
-
-#ifdef REGEX_MALLOC
-
-#define REGEX_ALLOCATE_STACK malloc
-#define REGEX_REALLOCATE_STACK(source, osize, nsize) realloc (source, nsize)
-#define REGEX_FREE_STACK free
-
-#else /* not REGEX_MALLOC */
-
-#define REGEX_ALLOCATE_STACK alloca
-
-#define REGEX_REALLOCATE_STACK(source, osize, nsize) \
- REGEX_REALLOCATE (source, osize, nsize)
-/* No need to explicitly free anything. */
-#define REGEX_FREE_STACK(arg)
-
-#endif /* not REGEX_MALLOC */
-#endif /* not using relocating allocator */
-
-
-/* True if `size1' is non-NULL and PTR is pointing anywhere inside
- `string1' or just past its end. This works if PTR is NULL, which is
- a good thing. */
-#define FIRST_STRING_P(ptr) \
- (size1 && string1 <= (ptr) && (ptr) <= string1 + size1)
-
-/* (Re)Allocate N items of type T using malloc, or fail. */
-#define TALLOC(n, t) ((t *) malloc ((n) * sizeof (t)))
-#define RETALLOC(addr, n, t) ((addr) = (t *) realloc (addr, (n) * sizeof (t)))
-#define RETALLOC_IF(addr, n, t) \
- if (addr) RETALLOC((addr), (n), t); else (addr) = TALLOC ((n), t)
-#define REGEX_TALLOC(n, t) ((t *) REGEX_ALLOCATE ((n) * sizeof (t)))
-
-#define BYTEWIDTH 8 /* In bits. */
-
-#define STREQ(s1, s2) ((strcmp (s1, s2) == 0))
-
-#undef MAX
-#undef MIN
-#define MAX(a, b) ((a) > (b) ? (a) : (b))
-#define MIN(a, b) ((a) < (b) ? (a) : (b))
-
-typedef char boolean;
-#define false 0
-#define true 1
-
-static int re_match_2_internal ();
-
-/* These are the command codes that appear in compiled regular
- expressions. Some opcodes are followed by argument bytes. A
- command code can specify any interpretation whatsoever for its
- arguments. Zero bytes may appear in the compiled regular expression. */
-
-typedef enum
-{
- no_op = 0,
-
- /* Succeed right away--no more backtracking. */
- succeed,
-
- /* Followed by one byte giving n, then by n literal bytes. */
- exactn,
-
- /* Matches any (more or less) character. */
- anychar,
-
- /* Matches any one char belonging to specified set. First
- following byte is number of bitmap bytes. Then come bytes
- for a bitmap saying which chars are in. Bits in each byte
- are ordered low-bit-first. A character is in the set if its
- bit is 1. A character too large to have a bit in the map is
- automatically not in the set. */
- charset,
-
- /* Same parameters as charset, but match any character that is
- not one of those specified. */
- charset_not,
-
- /* Start remembering the text that is matched, for storing in a
- register. Followed by one byte with the register number, in
- the range 0 to one less than the pattern buffer's re_nsub
- field. Then followed by one byte with the number of groups
- inner to this one. (This last has to be part of the
- start_memory only because we need it in the on_failure_jump
- of re_match_2.) */
- start_memory,
-
- /* Stop remembering the text that is matched and store it in a
- memory register. Followed by one byte with the register
- number, in the range 0 to one less than `re_nsub' in the
- pattern buffer, and one byte with the number of inner groups,
- just like `start_memory'. (We need the number of inner
- groups here because we don't have any easy way of finding the
- corresponding start_memory when we're at a stop_memory.) */
- stop_memory,
-
- /* Match a duplicate of something remembered. Followed by one
- byte containing the register number. */
- duplicate,
-
- /* Fail unless at beginning of line. */
- begline,
-
- /* Fail unless at end of line. */
- endline,
-
- /* Succeeds if at beginning of buffer (if emacs) or at beginning
- of string to be matched (if not). */
- begbuf,
-
- /* Analogously, for end of buffer/string. */
- endbuf,
-
- /* Followed by two byte relative address to which to jump. */
- jump,
-
- /* Same as jump, but marks the end of an alternative. */
- jump_past_alt,
-
- /* Followed by two-byte relative address of place to resume at
- in case of failure. */
- on_failure_jump,
-
- /* Like on_failure_jump, but pushes a placeholder instead of the
- current string position when executed. */
- on_failure_keep_string_jump,
-
- /* Throw away latest failure point and then jump to following
- two-byte relative address. */
- pop_failure_jump,
-
- /* Change to pop_failure_jump if know won't have to backtrack to
- match; otherwise change to jump. This is used to jump
- back to the beginning of a repeat. If what follows this jump
- clearly won't match what the repeat does, such that we can be
- sure that there is no use backtracking out of repetitions
- already matched, then we change it to a pop_failure_jump.
- Followed by two-byte address. */
- maybe_pop_jump,
-
- /* Jump to following two-byte address, and push a dummy failure
- point. This failure point will be thrown away if an attempt
- is made to use it for a failure. A `+' construct makes this
- before the first repeat. Also used as an intermediary kind
- of jump when compiling an alternative. */
- dummy_failure_jump,
-
- /* Push a dummy failure point and continue. Used at the end of
- alternatives. */
- push_dummy_failure,
-
- /* Followed by two-byte relative address and two-byte number n.
- After matching N times, jump to the address upon failure. */
- succeed_n,
-
- /* Followed by two-byte relative address, and two-byte number n.
- Jump to the address N times, then fail. */
- jump_n,
-
- /* Set the following two-byte relative address to the
- subsequent two-byte number. The address *includes* the two
- bytes of number. */
- set_number_at,
-
- wordchar, /* Matches any word-constituent character. */
- notwordchar, /* Matches any char that is not a word-constituent. */
-
- wordbeg, /* Succeeds if at word beginning. */
- wordend, /* Succeeds if at word end. */
-
- wordbound, /* Succeeds if at a word boundary. */
- notwordbound /* Succeeds if not at a word boundary. */
-
-#ifdef emacs
- ,before_dot, /* Succeeds if before point. */
- at_dot, /* Succeeds if at point. */
- after_dot, /* Succeeds if after point. */
-
- /* Matches any character whose syntax is specified. Followed by
- a byte which contains a syntax code, e.g., Sword. */
- syntaxspec,
-
- /* Matches any character whose syntax is not that specified. */
- notsyntaxspec
-#endif /* emacs */
-} re_opcode_t;
-
-/* Common operations on the compiled pattern. */
-
-/* Store NUMBER in two contiguous bytes starting at DESTINATION. */
-
-#define STORE_NUMBER(destination, number) \
- do { \
- (destination)[0] = (number) & 0377; \
- (destination)[1] = (number) >> 8; \
- } while (0)
-
-/* Same as STORE_NUMBER, except increment DESTINATION to
- the byte after where the number is stored. Therefore, DESTINATION
- must be an lvalue. */
-
-#define STORE_NUMBER_AND_INCR(destination, number) \
- do { \
- STORE_NUMBER (destination, number); \
- (destination) += 2; \
- } while (0)
-
-/* Put into DESTINATION a number stored in two contiguous bytes starting
- at SOURCE. */
-
-#define EXTRACT_NUMBER(destination, source) \
- do { \
- (destination) = *(source) & 0377; \
- (destination) += SIGN_EXTEND_CHAR (*((source) + 1)) << 8; \
- } while (0)
-
-#ifdef DEBUG
-static void
-extract_number (dest, source)
- int *dest;
- unsigned char *source;
-{
- int temp = SIGN_EXTEND_CHAR (*(source + 1));
- *dest = *source & 0377;
- *dest += temp << 8;
-}
-
-#ifndef EXTRACT_MACROS /* To debug the macros. */
-#undef EXTRACT_NUMBER
-#define EXTRACT_NUMBER(dest, src) extract_number (&dest, src)
-#endif /* not EXTRACT_MACROS */
-
-#endif /* DEBUG */
-
-/* Same as EXTRACT_NUMBER, except increment SOURCE to after the number.
- SOURCE must be an lvalue. */
-
-#define EXTRACT_NUMBER_AND_INCR(destination, source) \
- do { \
- EXTRACT_NUMBER (destination, source); \
- (source) += 2; \
- } while (0)
-
-#ifdef DEBUG
-static void
-extract_number_and_incr (destination, source)
- int *destination;
- unsigned char **source;
-{
- extract_number (destination, *source);
- *source += 2;
-}
-
-#ifndef EXTRACT_MACROS
-#undef EXTRACT_NUMBER_AND_INCR
-#define EXTRACT_NUMBER_AND_INCR(dest, src) \
- extract_number_and_incr (&dest, &src)
-#endif /* not EXTRACT_MACROS */
-
-#endif /* DEBUG */
-
-/* If DEBUG is defined, Regex prints many voluminous messages about what
- it is doing (if the variable `debug' is nonzero). If linked with the
- main program in `iregex.c', you can enter patterns and strings
- interactively. And if linked with the main program in `main.c' and
- the other test files, you can run the already-written tests. */
-
-#ifdef DEBUG
-
-/* We use standard I/O for debugging. */
-#include <stdio.h>
-
-/* It is useful to test things that ``must'' be true when debugging. */
-#include <assert.h>
-
-static int debug = 0;
-
-#define DEBUG_STATEMENT(e) e
-#define DEBUG_PRINT1(x) if (debug) printf (x)
-#define DEBUG_PRINT2(x1, x2) if (debug) printf (x1, x2)
-#define DEBUG_PRINT3(x1, x2, x3) if (debug) printf (x1, x2, x3)
-#define DEBUG_PRINT4(x1, x2, x3, x4) if (debug) printf (x1, x2, x3, x4)
-#define DEBUG_PRINT_COMPILED_PATTERN(p, s, e) \
- if (debug) print_partial_compiled_pattern (s, e)
-#define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2) \
- if (debug) print_double_string (w, s1, sz1, s2, sz2)
-
-
-/* Print the fastmap in human-readable form. */
-
-void
-print_fastmap (fastmap)
- char *fastmap;
-{
- unsigned was_a_range = 0;
- unsigned i = 0;
-
- while (i < (1 << BYTEWIDTH))
- {
- if (fastmap[i++])
- {
- was_a_range = 0;
- putchar (i - 1);
- while (i < (1 << BYTEWIDTH) && fastmap[i])
- {
- was_a_range = 1;
- i++;
- }
- if (was_a_range)
- {
- printf ("-");
- putchar (i - 1);
- }
- }
- }
- putchar ('\n');
-}
-
-
-/* Print a compiled pattern string in human-readable form, starting at
- the START pointer into it and ending just before the pointer END. */
-
-void
-print_partial_compiled_pattern (start, end)
- unsigned char *start;
- unsigned char *end;
-{
- int mcnt, mcnt2;
- unsigned char *p = start;
- unsigned char *pend = end;
-
- if (start == NULL)
- {
- printf ("(null)\n");
- return;
- }
-
- /* Loop over pattern commands. */
- while (p < pend)
- {
- printf ("%d:\t", p - start);
-
- switch ((re_opcode_t) *p++)
- {
- case no_op:
- printf ("/no_op");
- break;
-
- case exactn:
- mcnt = *p++;
- printf ("/exactn/%d", mcnt);
- do
- {
- putchar ('/');
- putchar (*p++);
- }
- while (--mcnt);
- break;
-
- case start_memory:
- mcnt = *p++;
- printf ("/start_memory/%d/%d", mcnt, *p++);
- break;
-
- case stop_memory:
- mcnt = *p++;
- printf ("/stop_memory/%d/%d", mcnt, *p++);
- break;
-
- case duplicate:
- printf ("/duplicate/%d", *p++);
- break;
-
- case anychar:
- printf ("/anychar");
- break;
-
- case charset:
- case charset_not:
- {
- register int c, last = -100;
- register int in_range = 0;
-
- printf ("/charset [%s",
- (re_opcode_t) *(p - 1) == charset_not ? "^" : "");
-
- assert (p + *p < pend);
-
- for (c = 0; c < 256; c++)
- if (c / 8 < *p
- && (p[1 + (c/8)] & (1 << (c % 8))))
- {
- /* Are we starting a range? */
- if (last + 1 == c && ! in_range)
- {
- putchar ('-');
- in_range = 1;
- }
- /* Have we broken a range? */
- else if (last + 1 != c && in_range)
- {
- putchar (last);
- in_range = 0;
- }
-
- if (! in_range)
- putchar (c);
-
- last = c;
- }
-
- if (in_range)
- putchar (last);
-
- putchar (']');
-
- p += 1 + *p;
- }
- break;
-
- case begline:
- printf ("/begline");
- break;
-
- case endline:
- printf ("/endline");
- break;
-
- case on_failure_jump:
- extract_number_and_incr (&mcnt, &p);
- printf ("/on_failure_jump to %d", p + mcnt - start);
- break;
-
- case on_failure_keep_string_jump:
- extract_number_and_incr (&mcnt, &p);
- printf ("/on_failure_keep_string_jump to %d", p + mcnt - start);
- break;
-
- case dummy_failure_jump:
- extract_number_and_incr (&mcnt, &p);
- printf ("/dummy_failure_jump to %d", p + mcnt - start);
- break;
-
- case push_dummy_failure:
- printf ("/push_dummy_failure");
- break;
-
- case maybe_pop_jump:
- extract_number_and_incr (&mcnt, &p);
- printf ("/maybe_pop_jump to %d", p + mcnt - start);
- break;
-
- case pop_failure_jump:
- extract_number_and_incr (&mcnt, &p);
- printf ("/pop_failure_jump to %d", p + mcnt - start);
- break;
-
- case jump_past_alt:
- extract_number_and_incr (&mcnt, &p);
- printf ("/jump_past_alt to %d", p + mcnt - start);
- break;
-
- case jump:
- extract_number_and_incr (&mcnt, &p);
- printf ("/jump to %d", p + mcnt - start);
- break;
-
- case succeed_n:
- extract_number_and_incr (&mcnt, &p);
- extract_number_and_incr (&mcnt2, &p);
- printf ("/succeed_n to %d, %d times", p + mcnt - start, mcnt2);
- break;
-
- case jump_n:
- extract_number_and_incr (&mcnt, &p);
- extract_number_and_incr (&mcnt2, &p);
- printf ("/jump_n to %d, %d times", p + mcnt - start, mcnt2);
- break;
-
- case set_number_at:
- extract_number_and_incr (&mcnt, &p);
- extract_number_and_incr (&mcnt2, &p);
- printf ("/set_number_at location %d to %d", p + mcnt - start, mcnt2);
- break;
-
- case wordbound:
- printf ("/wordbound");
- break;
-
- case notwordbound:
- printf ("/notwordbound");
- break;
-
- case wordbeg:
- printf ("/wordbeg");
- break;
-
- case wordend:
- printf ("/wordend");
-
-#ifdef emacs
- case before_dot:
- printf ("/before_dot");
- break;
-
- case at_dot:
- printf ("/at_dot");
- break;
-
- case after_dot:
- printf ("/after_dot");
- break;
-
- case syntaxspec:
- printf ("/syntaxspec");
- mcnt = *p++;
- printf ("/%d", mcnt);
- break;
-
- case notsyntaxspec:
- printf ("/notsyntaxspec");
- mcnt = *p++;
- printf ("/%d", mcnt);
- break;
-#endif /* emacs */
-
- case wordchar:
- printf ("/wordchar");
- break;
-
- case notwordchar:
- printf ("/notwordchar");
- break;
-
- case begbuf:
- printf ("/begbuf");
- break;
-
- case endbuf:
- printf ("/endbuf");
- break;
-
- default:
- printf ("?%d", *(p-1));
- }
-
- putchar ('\n');
- }
-
- printf ("%d:\tend of pattern.\n", p - start);
-}
-
-
-void
-print_compiled_pattern (bufp)
- struct re_pattern_buffer *bufp;
-{
- unsigned char *buffer = bufp->buffer;
-
- print_partial_compiled_pattern (buffer, buffer + bufp->used);
- printf ("%d bytes used/%d bytes allocated.\n", bufp->used, bufp->allocated);
-
- if (bufp->fastmap_accurate && bufp->fastmap)
- {
- printf ("fastmap: ");
- print_fastmap (bufp->fastmap);
- }
-
- printf ("re_nsub: %d\t", bufp->re_nsub);
- printf ("regs_alloc: %d\t", bufp->regs_allocated);
- printf ("can_be_null: %d\t", bufp->can_be_null);
- printf ("newline_anchor: %d\n", bufp->newline_anchor);
- printf ("no_sub: %d\t", bufp->no_sub);
- printf ("not_bol: %d\t", bufp->not_bol);
- printf ("not_eol: %d\t", bufp->not_eol);
- printf ("syntax: %d\n", bufp->syntax);
- /* Perhaps we should print the translate table? */
-}
-
-
-void
-print_double_string (where, string1, size1, string2, size2)
- const char *where;
- const char *string1;
- const char *string2;
- int size1;
- int size2;
-{
- unsigned this_char;
-
- if (where == NULL)
- printf ("(null)");
- else
- {
- if (FIRST_STRING_P (where))
- {
- for (this_char = where - string1; this_char < size1; this_char++)
- putchar (string1[this_char]);
-
- where = string2;
- }
-
- for (this_char = where - string2; this_char < size2; this_char++)
- putchar (string2[this_char]);
- }
-}
-
-#else /* not DEBUG */
-
-#undef assert
-#define assert(e)
-
-#define DEBUG_STATEMENT(e)
-#define DEBUG_PRINT1(x)
-#define DEBUG_PRINT2(x1, x2)
-#define DEBUG_PRINT3(x1, x2, x3)
-#define DEBUG_PRINT4(x1, x2, x3, x4)
-#define DEBUG_PRINT_COMPILED_PATTERN(p, s, e)
-#define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2)
-
-#endif /* not DEBUG */
-
-/* Set by `re_set_syntax' to the current regexp syntax to recognize. Can
- also be assigned to arbitrarily: each pattern buffer stores its own
- syntax, so it can be changed between regex compilations. */
-/* This has no initializer because initialized variables in Emacs
- become read-only after dumping. */
-reg_syntax_t re_syntax_options;
-
-
-/* Specify the precise syntax of regexps for compilation. This provides
- for compatibility for various utilities which historically have
- different, incompatible syntaxes.
-
- The argument SYNTAX is a bit mask comprised of the various bits
- defined in regex.h. We return the old syntax. */
-
-reg_syntax_t
-re_set_syntax (syntax)
- reg_syntax_t syntax;
-{
- reg_syntax_t ret = re_syntax_options;
-
- re_syntax_options = syntax;
- return ret;
-}
-
-/* This table gives an error message for each of the error codes listed
- in regex.h. Obviously the order here has to be same as there.
- POSIX doesn't require that we do anything for REG_NOERROR,
- but why not be nice? */
-
-static const char *re_error_msgid[] =
- {
- gettext_noop ("Success"), /* REG_NOERROR */
- gettext_noop ("No match"), /* REG_NOMATCH */
- gettext_noop ("Invalid regular expression"), /* REG_BADPAT */
- gettext_noop ("Invalid collation character"), /* REG_ECOLLATE */
- gettext_noop ("Invalid character class name"), /* REG_ECTYPE */
- gettext_noop ("Trailing backslash"), /* REG_EESCAPE */
- gettext_noop ("Invalid back reference"), /* REG_ESUBREG */
- gettext_noop ("Unmatched [ or [^"), /* REG_EBRACK */
- gettext_noop ("Unmatched ( or \\("), /* REG_EPAREN */
- gettext_noop ("Unmatched \\{"), /* REG_EBRACE */
- gettext_noop ("Invalid content of \\{\\}"), /* REG_BADBR */
- gettext_noop ("Invalid range end"), /* REG_ERANGE */
- gettext_noop ("Memory exhausted"), /* REG_ESPACE */
- gettext_noop ("Invalid preceding regular expression"), /* REG_BADRPT */
- gettext_noop ("Premature end of regular expression"), /* REG_EEND */
- gettext_noop ("Regular expression too big"), /* REG_ESIZE */
- gettext_noop ("Unmatched ) or \\)"), /* REG_ERPAREN */
- };
-
-/* Avoiding alloca during matching, to placate r_alloc. */
-
-/* Define MATCH_MAY_ALLOCATE unless we need to make sure that the
- searching and matching functions should not call alloca. On some
- systems, alloca is implemented in terms of malloc, and if we're
- using the relocating allocator routines, then malloc could cause a
- relocation, which might (if the strings being searched are in the
- ralloc heap) shift the data out from underneath the regexp
- routines.
-
- Here's another reason to avoid allocation: Emacs
- processes input from X in a signal handler; processing X input may
- call malloc; if input arrives while a matching routine is calling
- malloc, then we're scrod. But Emacs can't just block input while
- calling matching routines; then we don't notice interrupts when
- they come in. So, Emacs blocks input around all regexp calls
- except the matching calls, which it leaves unprotected, in the
- faith that they will not malloc. */
-
-/* Normally, this is fine. */
-#define MATCH_MAY_ALLOCATE
-
-/* When using GNU C, we are not REALLY using the C alloca, no matter
- what config.h may say. So don't take precautions for it. */
-#ifdef __GNUC__
-#undef C_ALLOCA
-#endif
-
-/* The match routines may not allocate if (1) they would do it with malloc
- and (2) it's not safe for them to use malloc.
- Note that if REL_ALLOC is defined, matching would not use malloc for the
- failure stack, but we would still use it for the register vectors;
- so REL_ALLOC should not affect this. */
-#if (defined (C_ALLOCA) || defined (REGEX_MALLOC)) && defined (emacs)
-#undef MATCH_MAY_ALLOCATE
-#endif
-
-
-/* Failure stack declarations and macros; both re_compile_fastmap and
- re_match_2 use a failure stack. These have to be macros because of
- REGEX_ALLOCATE_STACK. */
-
-
-/* Number of failure points for which to initially allocate space
- when matching. If this number is exceeded, we allocate more
- space, so it is not a hard limit. */
-#ifndef INIT_FAILURE_ALLOC
-#define INIT_FAILURE_ALLOC 5
-#endif
-
-/* Roughly the maximum number of failure points on the stack. Would be
- exactly that if always used MAX_FAILURE_ITEMS items each time we failed.
- This is a variable only so users of regex can assign to it; we never
- change it ourselves. */
-#if defined (MATCH_MAY_ALLOCATE)
-/* 4400 was enough to cause a crash on Alpha OSF/1,
- whose default stack limit is 2mb. */
-int re_max_failures = 20000;
-#else
-int re_max_failures = 2000;
-#endif
-
-union fail_stack_elt
-{
- unsigned char *pointer;
- int integer;
-};
-
-typedef union fail_stack_elt fail_stack_elt_t;
-
-typedef struct
-{
- fail_stack_elt_t *stack;
- unsigned size;
- unsigned avail; /* Offset of next open position. */
-} fail_stack_type;
-
-#define FAIL_STACK_EMPTY() (fail_stack.avail == 0)
-#define FAIL_STACK_PTR_EMPTY() (fail_stack_ptr->avail == 0)
-#define FAIL_STACK_FULL() (fail_stack.avail == fail_stack.size)
-
-
-/* Define macros to initialize and free the failure stack.
- Do `return -2' if the alloc fails. */
-
-#ifdef MATCH_MAY_ALLOCATE
-#define INIT_FAIL_STACK() \
- do { \
- fail_stack.stack = (fail_stack_elt_t *) \
- REGEX_ALLOCATE_STACK (INIT_FAILURE_ALLOC * sizeof (fail_stack_elt_t)); \
- \
- if (fail_stack.stack == NULL) \
- return -2; \
- \
- fail_stack.size = INIT_FAILURE_ALLOC; \
- fail_stack.avail = 0; \
- } while (0)
-
-#define RESET_FAIL_STACK() REGEX_FREE_STACK (fail_stack.stack)
-#else
-#define INIT_FAIL_STACK() \
- do { \
- fail_stack.avail = 0; \
- } while (0)
-
-#define RESET_FAIL_STACK()
-#endif
-
-
-/* Double the size of FAIL_STACK, up to approximately `re_max_failures' items.
-
- Return 1 if succeeds, and 0 if either ran out of memory
- allocating space for it or it was already too large.
-
- REGEX_REALLOCATE_STACK requires `destination' be declared. */
-
-#define DOUBLE_FAIL_STACK(fail_stack) \
- ((fail_stack).size > re_max_failures * MAX_FAILURE_ITEMS \
- ? 0 \
- : ((fail_stack).stack = (fail_stack_elt_t *) \
- REGEX_REALLOCATE_STACK ((fail_stack).stack, \
- (fail_stack).size * sizeof (fail_stack_elt_t), \
- ((fail_stack).size << 1) * sizeof (fail_stack_elt_t)), \
- \
- (fail_stack).stack == NULL \
- ? 0 \
- : ((fail_stack).size <<= 1, \
- 1)))
-
-
-/* Push pointer POINTER on FAIL_STACK.
- Return 1 if was able to do so and 0 if ran out of memory allocating
- space to do so. */
-#define PUSH_PATTERN_OP(POINTER, FAIL_STACK) \
- ((FAIL_STACK_FULL () \
- && !DOUBLE_FAIL_STACK (FAIL_STACK)) \
- ? 0 \
- : ((FAIL_STACK).stack[(FAIL_STACK).avail++].pointer = POINTER, \
- 1))
-
-/* Push a pointer value onto the failure stack.
- Assumes the variable `fail_stack'. Probably should only
- be called from within `PUSH_FAILURE_POINT'. */
-#define PUSH_FAILURE_POINTER(item) \
- fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (item)
-
-/* This pushes an integer-valued item onto the failure stack.
- Assumes the variable `fail_stack'. Probably should only
- be called from within `PUSH_FAILURE_POINT'. */
-#define PUSH_FAILURE_INT(item) \
- fail_stack.stack[fail_stack.avail++].integer = (item)
-
-/* Push a fail_stack_elt_t value onto the failure stack.
- Assumes the variable `fail_stack'. Probably should only
- be called from within `PUSH_FAILURE_POINT'. */
-#define PUSH_FAILURE_ELT(item) \
- fail_stack.stack[fail_stack.avail++] = (item)
-
-/* These three POP... operations complement the three PUSH... operations.
- All assume that `fail_stack' is nonempty. */
-#define POP_FAILURE_POINTER() fail_stack.stack[--fail_stack.avail].pointer
-#define POP_FAILURE_INT() fail_stack.stack[--fail_stack.avail].integer
-#define POP_FAILURE_ELT() fail_stack.stack[--fail_stack.avail]
-
-/* Used to omit pushing failure point id's when we're not debugging. */
-#ifdef DEBUG
-#define DEBUG_PUSH PUSH_FAILURE_INT
-#define DEBUG_POP(item_addr) *(item_addr) = POP_FAILURE_INT ()
-#else
-#define DEBUG_PUSH(item)
-#define DEBUG_POP(item_addr)
-#endif
-
-
-/* Push the information about the state we will need
- if we ever fail back to it.
-
- Requires variables fail_stack, regstart, regend, reg_info, and
- num_regs be declared. DOUBLE_FAIL_STACK requires `destination' be
- declared.
-
- Does `return FAILURE_CODE' if runs out of memory. */
-
-#define PUSH_FAILURE_POINT(pattern_place, string_place, failure_code) \
- do { \
- char *destination; \
- /* Must be int, so when we don't save any registers, the arithmetic \
- of 0 + -1 isn't done as unsigned. */ \
- int this_reg; \
- \
- DEBUG_STATEMENT (failure_id++); \
- DEBUG_STATEMENT (nfailure_points_pushed++); \
- DEBUG_PRINT2 ("\nPUSH_FAILURE_POINT #%u:\n", failure_id); \
- DEBUG_PRINT2 (" Before push, next avail: %d\n", (fail_stack).avail);\
- DEBUG_PRINT2 (" size: %d\n", (fail_stack).size);\
- \
- DEBUG_PRINT2 (" slots needed: %d\n", NUM_FAILURE_ITEMS); \
- DEBUG_PRINT2 (" available: %d\n", REMAINING_AVAIL_SLOTS); \
- \
- /* Ensure we have enough space allocated for what we will push. */ \
- while (REMAINING_AVAIL_SLOTS < NUM_FAILURE_ITEMS) \
- { \
- if (!DOUBLE_FAIL_STACK (fail_stack)) \
- return failure_code; \
- \
- DEBUG_PRINT2 ("\n Doubled stack; size now: %d\n", \
- (fail_stack).size); \
- DEBUG_PRINT2 (" slots available: %d\n", REMAINING_AVAIL_SLOTS);\
- } \
- \
- /* Push the info, starting with the registers. */ \
- DEBUG_PRINT1 ("\n"); \
- \
- if (1) \
- for (this_reg = lowest_active_reg; this_reg <= highest_active_reg; \
- this_reg++) \
- { \
- DEBUG_PRINT2 (" Pushing reg: %d\n", this_reg); \
- DEBUG_STATEMENT (num_regs_pushed++); \
- \
- DEBUG_PRINT2 (" start: 0x%x\n", regstart[this_reg]); \
- PUSH_FAILURE_POINTER (regstart[this_reg]); \
- \
- DEBUG_PRINT2 (" end: 0x%x\n", regend[this_reg]); \
- PUSH_FAILURE_POINTER (regend[this_reg]); \
- \
- DEBUG_PRINT2 (" info: 0x%x\n ", reg_info[this_reg]); \
- DEBUG_PRINT2 (" match_null=%d", \
- REG_MATCH_NULL_STRING_P (reg_info[this_reg])); \
- DEBUG_PRINT2 (" active=%d", IS_ACTIVE (reg_info[this_reg])); \
- DEBUG_PRINT2 (" matched_something=%d", \
- MATCHED_SOMETHING (reg_info[this_reg])); \
- DEBUG_PRINT2 (" ever_matched=%d", \
- EVER_MATCHED_SOMETHING (reg_info[this_reg])); \
- DEBUG_PRINT1 ("\n"); \
- PUSH_FAILURE_ELT (reg_info[this_reg].word); \
- } \
- \
- DEBUG_PRINT2 (" Pushing low active reg: %d\n", lowest_active_reg);\
- PUSH_FAILURE_INT (lowest_active_reg); \
- \
- DEBUG_PRINT2 (" Pushing high active reg: %d\n", highest_active_reg);\
- PUSH_FAILURE_INT (highest_active_reg); \
- \
- DEBUG_PRINT2 (" Pushing pattern 0x%x: ", pattern_place); \
- DEBUG_PRINT_COMPILED_PATTERN (bufp, pattern_place, pend); \
- PUSH_FAILURE_POINTER (pattern_place); \
- \
- DEBUG_PRINT2 (" Pushing string 0x%x: `", string_place); \
- DEBUG_PRINT_DOUBLE_STRING (string_place, string1, size1, string2, \
- size2); \
- DEBUG_PRINT1 ("'\n"); \
- PUSH_FAILURE_POINTER (string_place); \
- \
- DEBUG_PRINT2 (" Pushing failure id: %u\n", failure_id); \
- DEBUG_PUSH (failure_id); \
- } while (0)
-
-/* This is the number of items that are pushed and popped on the stack
- for each register. */
-#define NUM_REG_ITEMS 3
-
-/* Individual items aside from the registers. */
-#ifdef DEBUG
-#define NUM_NONREG_ITEMS 5 /* Includes failure point id. */
-#else
-#define NUM_NONREG_ITEMS 4
-#endif
-
-/* We push at most this many items on the stack. */
-/* We used to use (num_regs - 1), which is the number of registers
- this regexp will save; but that was changed to 5
- to avoid stack overflow for a regexp with lots of parens. */
-#define MAX_FAILURE_ITEMS (5 * NUM_REG_ITEMS + NUM_NONREG_ITEMS)
-
-/* We actually push this many items. */
-#define NUM_FAILURE_ITEMS \
- (((0 \
- ? 0 : highest_active_reg - lowest_active_reg + 1) \
- * NUM_REG_ITEMS) \
- + NUM_NONREG_ITEMS)
-
-/* How many items can still be added to the stack without overflowing it. */
-#define REMAINING_AVAIL_SLOTS ((fail_stack).size - (fail_stack).avail)
-
-
-/* Pops what PUSH_FAIL_STACK pushes.
-
- We restore into the parameters, all of which should be lvalues:
- STR -- the saved data position.
- PAT -- the saved pattern position.
- LOW_REG, HIGH_REG -- the highest and lowest active registers.
- REGSTART, REGEND -- arrays of string positions.
- REG_INFO -- array of information about each subexpression.
-
- Also assumes the variables `fail_stack' and (if debugging), `bufp',
- `pend', `string1', `size1', `string2', and `size2'. */
-
-#define POP_FAILURE_POINT(str, pat, low_reg, high_reg, regstart, regend, reg_info)\
-{ \
- DEBUG_STATEMENT (fail_stack_elt_t failure_id;) \
- int this_reg; \
- const unsigned char *string_temp; \
- \
- assert (!FAIL_STACK_EMPTY ()); \
- \
- /* Remove failure points and point to how many regs pushed. */ \
- DEBUG_PRINT1 ("POP_FAILURE_POINT:\n"); \
- DEBUG_PRINT2 (" Before pop, next avail: %d\n", fail_stack.avail); \
- DEBUG_PRINT2 (" size: %d\n", fail_stack.size); \
- \
- assert (fail_stack.avail >= NUM_NONREG_ITEMS); \
- \
- DEBUG_POP (&failure_id); \
- DEBUG_PRINT2 (" Popping failure id: %u\n", failure_id); \
- \
- /* If the saved string location is NULL, it came from an \
- on_failure_keep_string_jump opcode, and we want to throw away the \
- saved NULL, thus retaining our current position in the string. */ \
- string_temp = POP_FAILURE_POINTER (); \
- if (string_temp != NULL) \
- str = (const char *) string_temp; \
- \
- DEBUG_PRINT2 (" Popping string 0x%x: `", str); \
- DEBUG_PRINT_DOUBLE_STRING (str, string1, size1, string2, size2); \
- DEBUG_PRINT1 ("'\n"); \
- \
- pat = (unsigned char *) POP_FAILURE_POINTER (); \
- DEBUG_PRINT2 (" Popping pattern 0x%x: ", pat); \
- DEBUG_PRINT_COMPILED_PATTERN (bufp, pat, pend); \
- \
- /* Restore register info. */ \
- high_reg = (unsigned) POP_FAILURE_INT (); \
- DEBUG_PRINT2 (" Popping high active reg: %d\n", high_reg); \
- \
- low_reg = (unsigned) POP_FAILURE_INT (); \
- DEBUG_PRINT2 (" Popping low active reg: %d\n", low_reg); \
- \
- if (1) \
- for (this_reg = high_reg; this_reg >= low_reg; this_reg--) \
- { \
- DEBUG_PRINT2 (" Popping reg: %d\n", this_reg); \
- \
- reg_info[this_reg].word = POP_FAILURE_ELT (); \
- DEBUG_PRINT2 (" info: 0x%x\n", reg_info[this_reg]); \
- \
- regend[this_reg] = (const char *) POP_FAILURE_POINTER (); \
- DEBUG_PRINT2 (" end: 0x%x\n", regend[this_reg]); \
- \
- regstart[this_reg] = (const char *) POP_FAILURE_POINTER (); \
- DEBUG_PRINT2 (" start: 0x%x\n", regstart[this_reg]); \
- } \
- else \
- { \
- for (this_reg = highest_active_reg; this_reg > high_reg; this_reg--) \
- { \
- reg_info[this_reg].word.integer = 0; \
- regend[this_reg] = 0; \
- regstart[this_reg] = 0; \
- } \
- highest_active_reg = high_reg; \
- } \
- \
- set_regs_matched_done = 0; \
- DEBUG_STATEMENT (nfailure_points_popped++); \
-} /* POP_FAILURE_POINT */
-
-
-
-/* Structure for per-register (a.k.a. per-group) information.
- Other register information, such as the
- starting and ending positions (which are addresses), and the list of
- inner groups (which is a bits list) are maintained in separate
- variables.
-
- We are making a (strictly speaking) nonportable assumption here: that
- the compiler will pack our bit fields into something that fits into
- the type of `word', i.e., is something that fits into one item on the
- failure stack. */
-
-typedef union
-{
- fail_stack_elt_t word;
- struct
- {
- /* This field is one if this group can match the empty string,
- zero if not. If not yet determined, `MATCH_NULL_UNSET_VALUE'. */
-#define MATCH_NULL_UNSET_VALUE 3
- unsigned match_null_string_p : 2;
- unsigned is_active : 1;
- unsigned matched_something : 1;
- unsigned ever_matched_something : 1;
- } bits;
-} register_info_type;
-
-#define REG_MATCH_NULL_STRING_P(R) ((R).bits.match_null_string_p)
-#define IS_ACTIVE(R) ((R).bits.is_active)
-#define MATCHED_SOMETHING(R) ((R).bits.matched_something)
-#define EVER_MATCHED_SOMETHING(R) ((R).bits.ever_matched_something)
-
-
-/* Call this when have matched a real character; it sets `matched' flags
- for the subexpressions which we are currently inside. Also records
- that those subexprs have matched. */
-#define SET_REGS_MATCHED() \
- do \
- { \
- if (!set_regs_matched_done) \
- { \
- unsigned r; \
- set_regs_matched_done = 1; \
- for (r = lowest_active_reg; r <= highest_active_reg; r++) \
- { \
- MATCHED_SOMETHING (reg_info[r]) \
- = EVER_MATCHED_SOMETHING (reg_info[r]) \
- = 1; \
- } \
- } \
- } \
- while (0)
-
-/* Registers are set to a sentinel when they haven't yet matched. */
-static char reg_unset_dummy;
-#define REG_UNSET_VALUE (&reg_unset_dummy)
-#define REG_UNSET(e) ((e) == REG_UNSET_VALUE)
-
-/* Subroutine declarations and macros for regex_compile. */
-
-static void store_op1 (), store_op2 ();
-static void insert_op1 (), insert_op2 ();
-static boolean at_begline_loc_p (), at_endline_loc_p ();
-static boolean group_in_compile_stack ();
-static reg_errcode_t compile_range ();
-
-/* Fetch the next character in the uncompiled pattern---translating it
- if necessary. Also cast from a signed character in the constant
- string passed to us by the user to an unsigned char that we can use
- as an array index (in, e.g., `translate'). */
-#ifndef PATFETCH
-#define PATFETCH(c) \
- do {if (p == pend) return REG_EEND; \
- c = (unsigned char) *p++; \
- if (translate) c = (unsigned char) translate[c]; \
- } while (0)
-#endif
-
-/* Fetch the next character in the uncompiled pattern, with no
- translation. */
-#define PATFETCH_RAW(c) \
- do {if (p == pend) return REG_EEND; \
- c = (unsigned char) *p++; \
- } while (0)
-
-/* Go backwards one character in the pattern. */
-#define PATUNFETCH p--
-
-
-/* If `translate' is non-null, return translate[D], else just D. We
- cast the subscript to translate because some data is declared as
- `char *', to avoid warnings when a string constant is passed. But
- when we use a character as a subscript we must make it unsigned. */
-#ifndef TRANSLATE
-#define TRANSLATE(d) \
- (translate ? (char) translate[(unsigned char) (d)] : (d))
-#endif
-
-
-/* Macros for outputting the compiled pattern into `buffer'. */
-
-/* If the buffer isn't allocated when it comes in, use this. */
-#define INIT_BUF_SIZE 32
-
-/* Make sure we have at least N more bytes of space in buffer. */
-#define GET_BUFFER_SPACE(n) \
- while (b - bufp->buffer + (n) > bufp->allocated) \
- EXTEND_BUFFER ()
-
-/* Make sure we have one more byte of buffer space and then add C to it. */
-#define BUF_PUSH(c) \
- do { \
- GET_BUFFER_SPACE (1); \
- *b++ = (unsigned char) (c); \
- } while (0)
-
-
-/* Ensure we have two more bytes of buffer space and then append C1 and C2. */
-#define BUF_PUSH_2(c1, c2) \
- do { \
- GET_BUFFER_SPACE (2); \
- *b++ = (unsigned char) (c1); \
- *b++ = (unsigned char) (c2); \
- } while (0)
-
-
-/* As with BUF_PUSH_2, except for three bytes. */
-#define BUF_PUSH_3(c1, c2, c3) \
- do { \
- GET_BUFFER_SPACE (3); \
- *b++ = (unsigned char) (c1); \
- *b++ = (unsigned char) (c2); \
- *b++ = (unsigned char) (c3); \
- } while (0)
-
-
-/* Store a jump with opcode OP at LOC to location TO. We store a
- relative address offset by the three bytes the jump itself occupies. */
-#define STORE_JUMP(op, loc, to) \
- store_op1 (op, loc, (to) - (loc) - 3)
-
-/* Likewise, for a two-argument jump. */
-#define STORE_JUMP2(op, loc, to, arg) \
- store_op2 (op, loc, (to) - (loc) - 3, arg)
-
-/* Like `STORE_JUMP', but for inserting. Assume `b' is the buffer end. */
-#define INSERT_JUMP(op, loc, to) \
- insert_op1 (op, loc, (to) - (loc) - 3, b)
-
-/* Like `STORE_JUMP2', but for inserting. Assume `b' is the buffer end. */
-#define INSERT_JUMP2(op, loc, to, arg) \
- insert_op2 (op, loc, (to) - (loc) - 3, arg, b)
-
-
-/* This is not an arbitrary limit: the arguments which represent offsets
- into the pattern are two bytes long. So if 2^16 bytes turns out to
- be too small, many things would have to change. */
-#define MAX_BUF_SIZE (1L << 16)
-
-
-/* Extend the buffer by twice its current size via realloc and
- reset the pointers that pointed into the old block to point to the
- correct places in the new one. If extending the buffer results in it
- being larger than MAX_BUF_SIZE, then flag memory exhausted. */
-#define EXTEND_BUFFER() \
- do { \
- unsigned char *old_buffer = bufp->buffer; \
- if (bufp->allocated == MAX_BUF_SIZE) \
- return REG_ESIZE; \
- bufp->allocated <<= 1; \
- if (bufp->allocated > MAX_BUF_SIZE) \
- bufp->allocated = MAX_BUF_SIZE; \
- bufp->buffer = (unsigned char *) realloc (bufp->buffer, bufp->allocated);\
- if (bufp->buffer == NULL) \
- return REG_ESPACE; \
- /* If the buffer moved, move all the pointers into it. */ \
- if (old_buffer != bufp->buffer) \
- { \
- b = (b - old_buffer) + bufp->buffer; \
- begalt = (begalt - old_buffer) + bufp->buffer; \
- if (fixup_alt_jump) \
- fixup_alt_jump = (fixup_alt_jump - old_buffer) + bufp->buffer;\
- if (laststart) \
- laststart = (laststart - old_buffer) + bufp->buffer; \
- if (pending_exact) \
- pending_exact = (pending_exact - old_buffer) + bufp->buffer; \
- } \
- } while (0)
-
-
-/* Since we have one byte reserved for the register number argument to
- {start,stop}_memory, the maximum number of groups we can report
- things about is what fits in that byte. */
-#define MAX_REGNUM 255
-
-/* But patterns can have more than `MAX_REGNUM' registers. We just
- ignore the excess. */
-typedef unsigned regnum_t;
-
-
-/* Macros for the compile stack. */
-
-/* Since offsets can go either forwards or backwards, this type needs to
- be able to hold values from -(MAX_BUF_SIZE - 1) to MAX_BUF_SIZE - 1. */
-typedef int pattern_offset_t;
-
-typedef struct
-{
- pattern_offset_t begalt_offset;
- pattern_offset_t fixup_alt_jump;
- pattern_offset_t inner_group_offset;
- pattern_offset_t laststart_offset;
- regnum_t regnum;
-} compile_stack_elt_t;
-
-
-typedef struct
-{
- compile_stack_elt_t *stack;
- unsigned size;
- unsigned avail; /* Offset of next open position. */
-} compile_stack_type;
-
-
-#define INIT_COMPILE_STACK_SIZE 32
-
-#define COMPILE_STACK_EMPTY (compile_stack.avail == 0)
-#define COMPILE_STACK_FULL (compile_stack.avail == compile_stack.size)
-
-/* The next available element. */
-#define COMPILE_STACK_TOP (compile_stack.stack[compile_stack.avail])
-
-
-/* Set the bit for character C in a list. */
-#define SET_LIST_BIT(c) \
- (b[((unsigned char) (c)) / BYTEWIDTH] \
- |= 1 << (((unsigned char) c) % BYTEWIDTH))
-
-
-/* Get the next unsigned number in the uncompiled pattern. */
-#define GET_UNSIGNED_NUMBER(num) \
- { if (p != pend) \
- { \
- PATFETCH (c); \
- while (ISDIGIT (c)) \
- { \
- if (num < 0) \
- num = 0; \
- num = num * 10 + c - '0'; \
- if (p == pend) \
- break; \
- PATFETCH (c); \
- } \
- } \
- }
-
-#define CHAR_CLASS_MAX_LENGTH 6 /* Namely, `xdigit'. */
-
-#define IS_CHAR_CLASS(string) \
- (STREQ (string, "alpha") || STREQ (string, "upper") \
- || STREQ (string, "lower") || STREQ (string, "digit") \
- || STREQ (string, "alnum") || STREQ (string, "xdigit") \
- || STREQ (string, "space") || STREQ (string, "print") \
- || STREQ (string, "punct") || STREQ (string, "graph") \
- || STREQ (string, "cntrl") || STREQ (string, "blank"))
-
-#ifndef MATCH_MAY_ALLOCATE
-
-/* If we cannot allocate large objects within re_match_2_internal,
- we make the fail stack and register vectors global.
- The fail stack, we grow to the maximum size when a regexp
- is compiled.
- The register vectors, we adjust in size each time we
- compile a regexp, according to the number of registers it needs. */
-
-static fail_stack_type fail_stack;
-
-/* Size with which the following vectors are currently allocated.
- That is so we can make them bigger as needed,
- but never make them smaller. */
-static int regs_allocated_size;
-
-static const char ** regstart, ** regend;
-static const char ** old_regstart, ** old_regend;
-static const char **best_regstart, **best_regend;
-static register_info_type *reg_info;
-static const char **reg_dummy;
-static register_info_type *reg_info_dummy;
-
-/* Make the register vectors big enough for NUM_REGS registers,
- but don't make them smaller. */
-
-static
-regex_grow_registers (num_regs)
- int num_regs;
-{
- if (num_regs > regs_allocated_size)
- {
- RETALLOC_IF (regstart, num_regs, const char *);
- RETALLOC_IF (regend, num_regs, const char *);
- RETALLOC_IF (old_regstart, num_regs, const char *);
- RETALLOC_IF (old_regend, num_regs, const char *);
- RETALLOC_IF (best_regstart, num_regs, const char *);
- RETALLOC_IF (best_regend, num_regs, const char *);
- RETALLOC_IF (reg_info, num_regs, register_info_type);
- RETALLOC_IF (reg_dummy, num_regs, const char *);
- RETALLOC_IF (reg_info_dummy, num_regs, register_info_type);
-
- regs_allocated_size = num_regs;
- }
-}
-
-#endif /* not MATCH_MAY_ALLOCATE */
-
-/* `regex_compile' compiles PATTERN (of length SIZE) according to SYNTAX.
- Returns one of error codes defined in `regex.h', or zero for success.
-
- Assumes the `allocated' (and perhaps `buffer') and `translate'
- fields are set in BUFP on entry.
-
- If it succeeds, results are put in BUFP (if it returns an error, the
- contents of BUFP are undefined):
- `buffer' is the compiled pattern;
- `syntax' is set to SYNTAX;
- `used' is set to the length of the compiled pattern;
- `fastmap_accurate' is zero;
- `re_nsub' is the number of subexpressions in PATTERN;
- `not_bol' and `not_eol' are zero;
-
- The `fastmap' and `newline_anchor' fields are neither
- examined nor set. */
-
-/* Return, freeing storage we allocated. */
-#define FREE_STACK_RETURN(value) \
- return (free (compile_stack.stack), value)
-
-static reg_errcode_t
-regex_compile (pattern, size, syntax, bufp)
- const char *pattern;
- int size;
- reg_syntax_t syntax;
- struct re_pattern_buffer *bufp;
-{
- /* We fetch characters from PATTERN here. Even though PATTERN is
- `char *' (i.e., signed), we declare these variables as unsigned, so
- they can be reliably used as array indices. */
- register unsigned char c, c1;
-
- /* A random temporary spot in PATTERN. */
- const char *p1;
-
- /* Points to the end of the buffer, where we should append. */
- register unsigned char *b;
-
- /* Keeps track of unclosed groups. */
- compile_stack_type compile_stack;
-
- /* Points to the current (ending) position in the pattern. */
- const char *p = pattern;
- const char *pend = pattern + size;
-
- /* How to translate the characters in the pattern. */
- RE_TRANSLATE_TYPE translate = bufp->translate;
-
- /* Address of the count-byte of the most recently inserted `exactn'
- command. This makes it possible to tell if a new exact-match
- character can be added to that command or if the character requires
- a new `exactn' command. */
- unsigned char *pending_exact = 0;
-
- /* Address of start of the most recently finished expression.
- This tells, e.g., postfix * where to find the start of its
- operand. Reset at the beginning of groups and alternatives. */
- unsigned char *laststart = 0;
-
- /* Address of beginning of regexp, or inside of last group. */
- unsigned char *begalt;
-
- /* Place in the uncompiled pattern (i.e., the {) to
- which to go back if the interval is invalid. */
- const char *beg_interval;
-
- /* Address of the place where a forward jump should go to the end of
- the containing expression. Each alternative of an `or' -- except the
- last -- ends with a forward jump of this sort. */
- unsigned char *fixup_alt_jump = 0;
-
- /* Counts open-groups as they are encountered. Remembered for the
- matching close-group on the compile stack, so the same register
- number is put in the stop_memory as the start_memory. */
- regnum_t regnum = 0;
-
-#ifdef DEBUG
- DEBUG_PRINT1 ("\nCompiling pattern: ");
- if (debug)
- {
- unsigned debug_count;
-
- for (debug_count = 0; debug_count < size; debug_count++)
- putchar (pattern[debug_count]);
- putchar ('\n');
- }
-#endif /* DEBUG */
-
- /* Initialize the compile stack. */
- compile_stack.stack = TALLOC (INIT_COMPILE_STACK_SIZE, compile_stack_elt_t);
- if (compile_stack.stack == NULL)
- return REG_ESPACE;
-
- compile_stack.size = INIT_COMPILE_STACK_SIZE;
- compile_stack.avail = 0;
-
- /* Initialize the pattern buffer. */
- bufp->syntax = syntax;
- bufp->fastmap_accurate = 0;
- bufp->not_bol = bufp->not_eol = 0;
-
- /* Set `used' to zero, so that if we return an error, the pattern
- printer (for debugging) will think there's no pattern. We reset it
- at the end. */
- bufp->used = 0;
-
- /* Always count groups, whether or not bufp->no_sub is set. */
- bufp->re_nsub = 0;
-
-#if !defined (emacs) && !defined (SYNTAX_TABLE)
- /* Initialize the syntax table. */
- init_syntax_once ();
-#endif
-
- if (bufp->allocated == 0)
- {
- if (bufp->buffer)
- { /* If zero allocated, but buffer is non-null, try to realloc
- enough space. This loses if buffer's address is bogus, but
- that is the user's responsibility. */
- RETALLOC (bufp->buffer, INIT_BUF_SIZE, unsigned char);
- }
- else
- { /* Caller did not allocate a buffer. Do it for them. */
- bufp->buffer = TALLOC (INIT_BUF_SIZE, unsigned char);
- }
- if (!bufp->buffer) FREE_STACK_RETURN (REG_ESPACE);
-
- bufp->allocated = INIT_BUF_SIZE;
- }
-
- begalt = b = bufp->buffer;
-
- /* Loop through the uncompiled pattern until we're at the end. */
- while (p != pend)
- {
- PATFETCH (c);
-
- switch (c)
- {
- case '^':
- {
- if ( /* If at start of pattern, it's an operator. */
- p == pattern + 1
- /* If context independent, it's an operator. */
- || syntax & RE_CONTEXT_INDEP_ANCHORS
- /* Otherwise, depends on what's come before. */
- || at_begline_loc_p (pattern, p, syntax))
- BUF_PUSH (begline);
- else
- goto normal_char;
- }
- break;
-
-
- case '$':
- {
- if ( /* If at end of pattern, it's an operator. */
- p == pend
- /* If context independent, it's an operator. */
- || syntax & RE_CONTEXT_INDEP_ANCHORS
- /* Otherwise, depends on what's next. */
- || at_endline_loc_p (p, pend, syntax))
- BUF_PUSH (endline);
- else
- goto normal_char;
- }
- break;
-
-
- case '+':
- case '?':
- if ((syntax & RE_BK_PLUS_QM)
- || (syntax & RE_LIMITED_OPS))
- goto normal_char;
- handle_plus:
- case '*':
- /* If there is no previous pattern... */
- if (!laststart)
- {
- if (syntax & RE_CONTEXT_INVALID_OPS)
- FREE_STACK_RETURN (REG_BADRPT);
- else if (!(syntax & RE_CONTEXT_INDEP_OPS))
- goto normal_char;
- }
-
- {
- /* Are we optimizing this jump? */
- boolean keep_string_p = false;
-
- /* 1 means zero (many) matches is allowed. */
- char zero_times_ok = 0, many_times_ok = 0;
-
- /* If there is a sequence of repetition chars, collapse it
- down to just one (the right one). We can't combine
- interval operators with these because of, e.g., `a{2}*',
- which should only match an even number of `a's. */
-
- for (;;)
- {
- zero_times_ok |= c != '+';
- many_times_ok |= c != '?';
-
- if (p == pend)
- break;
-
- PATFETCH (c);
-
- if (c == '*'
- || (!(syntax & RE_BK_PLUS_QM) && (c == '+' || c == '?')))
- ;
-
- else if (syntax & RE_BK_PLUS_QM && c == '\\')
- {
- if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
-
- PATFETCH (c1);
- if (!(c1 == '+' || c1 == '?'))
- {
- PATUNFETCH;
- PATUNFETCH;
- break;
- }
-
- c = c1;
- }
- else
- {
- PATUNFETCH;
- break;
- }
-
- /* If we get here, we found another repeat character. */
- }
-
- /* Star, etc. applied to an empty pattern is equivalent
- to an empty pattern. */
- if (!laststart)
- break;
-
- /* Now we know whether or not zero matches is allowed
- and also whether or not two or more matches is allowed. */
- if (many_times_ok)
- { /* More than one repetition is allowed, so put in at the
- end a backward relative jump from `b' to before the next
- jump we're going to put in below (which jumps from
- laststart to after this jump).
-
- But if we are at the `*' in the exact sequence `.*\n',
- insert an unconditional jump backwards to the .,
- instead of the beginning of the loop. This way we only
- push a failure point once, instead of every time
- through the loop. */
- assert (p - 1 > pattern);
-
- /* Allocate the space for the jump. */
- GET_BUFFER_SPACE (3);
-
- /* We know we are not at the first character of the pattern,
- because laststart was nonzero. And we've already
- incremented `p', by the way, to be the character after
- the `*'. Do we have to do something analogous here
- for null bytes, because of RE_DOT_NOT_NULL? */
- if (TRANSLATE (*(p - 2)) == TRANSLATE ('.')
- && zero_times_ok
- && p < pend && TRANSLATE (*p) == TRANSLATE ('\n')
- && !(syntax & RE_DOT_NEWLINE))
- { /* We have .*\n. */
- STORE_JUMP (jump, b, laststart);
- keep_string_p = true;
- }
- else
- /* Anything else. */
- STORE_JUMP (maybe_pop_jump, b, laststart - 3);
-
- /* We've added more stuff to the buffer. */
- b += 3;
- }
-
- /* On failure, jump from laststart to b + 3, which will be the
- end of the buffer after this jump is inserted. */
- GET_BUFFER_SPACE (3);
- INSERT_JUMP (keep_string_p ? on_failure_keep_string_jump
- : on_failure_jump,
- laststart, b + 3);
- pending_exact = 0;
- b += 3;
-
- if (!zero_times_ok)
- {
- /* At least one repetition is required, so insert a
- `dummy_failure_jump' before the initial
- `on_failure_jump' instruction of the loop. This
- effects a skip over that instruction the first time
- we hit that loop. */
- GET_BUFFER_SPACE (3);
- INSERT_JUMP (dummy_failure_jump, laststart, laststart + 6);
- b += 3;
- }
- }
- break;
-
-
- case '.':
- laststart = b;
- BUF_PUSH (anychar);
- break;
-
-
- case '[':
- {
- boolean had_char_class = false;
-
- if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
-
- /* Ensure that we have enough space to push a charset: the
- opcode, the length count, and the bitset; 34 bytes in all. */
- GET_BUFFER_SPACE (34);
-
- laststart = b;
-
- /* We test `*p == '^' twice, instead of using an if
- statement, so we only need one BUF_PUSH. */
- BUF_PUSH (*p == '^' ? charset_not : charset);
- if (*p == '^')
- p++;
-
- /* Remember the first position in the bracket expression. */
- p1 = p;
-
- /* Push the number of bytes in the bitmap. */
- BUF_PUSH ((1 << BYTEWIDTH) / BYTEWIDTH);
-
- /* Clear the whole map. */
- bzero (b, (1 << BYTEWIDTH) / BYTEWIDTH);
-
- /* charset_not matches newline according to a syntax bit. */
- if ((re_opcode_t) b[-2] == charset_not
- && (syntax & RE_HAT_LISTS_NOT_NEWLINE))
- SET_LIST_BIT ('\n');
-
- /* Read in characters and ranges, setting map bits. */
- for (;;)
- {
- if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
-
- PATFETCH (c);
-
- /* \ might escape characters inside [...] and [^...]. */
- if ((syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && c == '\\')
- {
- if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
-
- PATFETCH (c1);
- SET_LIST_BIT (c1);
- continue;
- }
-
- /* Could be the end of the bracket expression. If it's
- not (i.e., when the bracket expression is `[]' so
- far), the ']' character bit gets set way below. */
- if (c == ']' && p != p1 + 1)
- break;
-
- /* Look ahead to see if it's a range when the last thing
- was a character class. */
- if (had_char_class && c == '-' && *p != ']')
- FREE_STACK_RETURN (REG_ERANGE);
-
- /* Look ahead to see if it's a range when the last thing
- was a character: if this is a hyphen not at the
- beginning or the end of a list, then it's the range
- operator. */
- if (c == '-'
- && !(p - 2 >= pattern && p[-2] == '[')
- && !(p - 3 >= pattern && p[-3] == '[' && p[-2] == '^')
- && *p != ']')
- {
- reg_errcode_t ret
- = compile_range (&p, pend, translate, syntax, b);
- if (ret != REG_NOERROR) FREE_STACK_RETURN (ret);
- }
-
- else if (p[0] == '-' && p[1] != ']')
- { /* This handles ranges made up of characters only. */
- reg_errcode_t ret;
-
- /* Move past the `-'. */
- PATFETCH (c1);
-
- ret = compile_range (&p, pend, translate, syntax, b);
- if (ret != REG_NOERROR) FREE_STACK_RETURN (ret);
- }
-
- /* See if we're at the beginning of a possible character
- class. */
-
- else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == ':')
- { /* Leave room for the null. */
- char str[CHAR_CLASS_MAX_LENGTH + 1];
-
- PATFETCH (c);
- c1 = 0;
-
- /* If pattern is `[[:'. */
- if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
-
- for (;;)
- {
- PATFETCH (c);
- if (c == ':' || c == ']' || p == pend
- || c1 == CHAR_CLASS_MAX_LENGTH)
- break;
- str[c1++] = c;
- }
- str[c1] = '\0';
-
- /* If isn't a word bracketed by `[:' and:`]':
- undo the ending character, the letters, and leave
- the leading `:' and `[' (but set bits for them). */
- if (c == ':' && *p == ']')
- {
- int ch;
- boolean is_alnum = STREQ (str, "alnum");
- boolean is_alpha = STREQ (str, "alpha");
- boolean is_blank = STREQ (str, "blank");
- boolean is_cntrl = STREQ (str, "cntrl");
- boolean is_digit = STREQ (str, "digit");
- boolean is_graph = STREQ (str, "graph");
- boolean is_lower = STREQ (str, "lower");
- boolean is_print = STREQ (str, "print");
- boolean is_punct = STREQ (str, "punct");
- boolean is_space = STREQ (str, "space");
- boolean is_upper = STREQ (str, "upper");
- boolean is_xdigit = STREQ (str, "xdigit");
-
- if (!IS_CHAR_CLASS (str))
- FREE_STACK_RETURN (REG_ECTYPE);
-
- /* Throw away the ] at the end of the character
- class. */
- PATFETCH (c);
-
- if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
-
- for (ch = 0; ch < 1 << BYTEWIDTH; ch++)
- {
- int translated = TRANSLATE (ch);
- /* This was split into 3 if's to
- avoid an arbitrary limit in some compiler. */
- if ( (is_alnum && ISALNUM (ch))
- || (is_alpha && ISALPHA (ch))
- || (is_blank && ISBLANK (ch))
- || (is_cntrl && ISCNTRL (ch)))
- SET_LIST_BIT (translated);
- if ( (is_digit && ISDIGIT (ch))
- || (is_graph && ISGRAPH (ch))
- || (is_lower && ISLOWER (ch))
- || (is_print && ISPRINT (ch)))
- SET_LIST_BIT (translated);
- if ( (is_punct && ISPUNCT (ch))
- || (is_space && ISSPACE (ch))
- || (is_upper && ISUPPER (ch))
- || (is_xdigit && ISXDIGIT (ch)))
- SET_LIST_BIT (translated);
- }
- had_char_class = true;
- }
- else
- {
- c1++;
- while (c1--)
- PATUNFETCH;
- SET_LIST_BIT ('[');
- SET_LIST_BIT (':');
- had_char_class = false;
- }
- }
- else
- {
- had_char_class = false;
- SET_LIST_BIT (c);
- }
- }
-
- /* Discard any (non)matching list bytes that are all 0 at the
- end of the map. Decrease the map-length byte too. */
- while ((int) b[-1] > 0 && b[b[-1] - 1] == 0)
- b[-1]--;
- b += b[-1];
- }
- break;
-
-
- case '(':
- if (syntax & RE_NO_BK_PARENS)
- goto handle_open;
- else
- goto normal_char;
-
-
- case ')':
- if (syntax & RE_NO_BK_PARENS)
- goto handle_close;
- else
- goto normal_char;
-
-
- case '\n':
- if (syntax & RE_NEWLINE_ALT)
- goto handle_alt;
- else
- goto normal_char;
-
-
- case '|':
- if (syntax & RE_NO_BK_VBAR)
- goto handle_alt;
- else
- goto normal_char;
-
-
- case '{':
- if (syntax & RE_INTERVALS && syntax & RE_NO_BK_BRACES)
- goto handle_interval;
- else
- goto normal_char;
-
-
- case '\\':
- if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
-
- /* Do not translate the character after the \, so that we can
- distinguish, e.g., \B from \b, even if we normally would
- translate, e.g., B to b. */
- PATFETCH_RAW (c);
-
- switch (c)
- {
- case '(':
- if (syntax & RE_NO_BK_PARENS)
- goto normal_backslash;
-
- handle_open:
- bufp->re_nsub++;
- regnum++;
-
- if (COMPILE_STACK_FULL)
- {
- RETALLOC (compile_stack.stack, compile_stack.size << 1,
- compile_stack_elt_t);
- if (compile_stack.stack == NULL) return REG_ESPACE;
-
- compile_stack.size <<= 1;
- }
-
- /* These are the values to restore when we hit end of this
- group. They are all relative offsets, so that if the
- whole pattern moves because of realloc, they will still
- be valid. */
- COMPILE_STACK_TOP.begalt_offset = begalt - bufp->buffer;
- COMPILE_STACK_TOP.fixup_alt_jump
- = fixup_alt_jump ? fixup_alt_jump - bufp->buffer + 1 : 0;
- COMPILE_STACK_TOP.laststart_offset = b - bufp->buffer;
- COMPILE_STACK_TOP.regnum = regnum;
-
- /* We will eventually replace the 0 with the number of
- groups inner to this one. But do not push a
- start_memory for groups beyond the last one we can
- represent in the compiled pattern. */
- if (regnum <= MAX_REGNUM)
- {
- COMPILE_STACK_TOP.inner_group_offset = b - bufp->buffer + 2;
- BUF_PUSH_3 (start_memory, regnum, 0);
- }
-
- compile_stack.avail++;
-
- fixup_alt_jump = 0;
- laststart = 0;
- begalt = b;
- /* If we've reached MAX_REGNUM groups, then this open
- won't actually generate any code, so we'll have to
- clear pending_exact explicitly. */
- pending_exact = 0;
- break;
-
-
- case ')':
- if (syntax & RE_NO_BK_PARENS) goto normal_backslash;
-
- if (COMPILE_STACK_EMPTY)
- {
- if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
- goto normal_backslash;
- else
- FREE_STACK_RETURN (REG_ERPAREN);
- }
-
- handle_close:
- if (fixup_alt_jump)
- { /* Push a dummy failure point at the end of the
- alternative for a possible future
- `pop_failure_jump' to pop. See comments at
- `push_dummy_failure' in `re_match_2'. */
- BUF_PUSH (push_dummy_failure);
-
- /* We allocated space for this jump when we assigned
- to `fixup_alt_jump', in the `handle_alt' case below. */
- STORE_JUMP (jump_past_alt, fixup_alt_jump, b - 1);
- }
-
- /* See similar code for backslashed left paren above. */
- if (COMPILE_STACK_EMPTY)
- {
- if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
- goto normal_char;
- else
- FREE_STACK_RETURN (REG_ERPAREN);
- }
-
- /* Since we just checked for an empty stack above, this
- ``can't happen''. */
- assert (compile_stack.avail != 0);
- {
- /* We don't just want to restore into `regnum', because
- later groups should continue to be numbered higher,
- as in `(ab)c(de)' -- the second group is #2. */
- regnum_t this_group_regnum;
-
- compile_stack.avail--;
- begalt = bufp->buffer + COMPILE_STACK_TOP.begalt_offset;
- fixup_alt_jump
- = COMPILE_STACK_TOP.fixup_alt_jump
- ? bufp->buffer + COMPILE_STACK_TOP.fixup_alt_jump - 1
- : 0;
- laststart = bufp->buffer + COMPILE_STACK_TOP.laststart_offset;
- this_group_regnum = COMPILE_STACK_TOP.regnum;
- /* If we've reached MAX_REGNUM groups, then this open
- won't actually generate any code, so we'll have to
- clear pending_exact explicitly. */
- pending_exact = 0;
-
- /* We're at the end of the group, so now we know how many
- groups were inside this one. */
- if (this_group_regnum <= MAX_REGNUM)
- {
- unsigned char *inner_group_loc
- = bufp->buffer + COMPILE_STACK_TOP.inner_group_offset;
-
- *inner_group_loc = regnum - this_group_regnum;
- BUF_PUSH_3 (stop_memory, this_group_regnum,
- regnum - this_group_regnum);
- }
- }
- break;
-
-
- case '|': /* `\|'. */
- if (syntax & RE_LIMITED_OPS || syntax & RE_NO_BK_VBAR)
- goto normal_backslash;
- handle_alt:
- if (syntax & RE_LIMITED_OPS)
- goto normal_char;
-
- /* Insert before the previous alternative a jump which
- jumps to this alternative if the former fails. */
- GET_BUFFER_SPACE (3);
- INSERT_JUMP (on_failure_jump, begalt, b + 6);
- pending_exact = 0;
- b += 3;
-
- /* The alternative before this one has a jump after it
- which gets executed if it gets matched. Adjust that
- jump so it will jump to this alternative's analogous
- jump (put in below, which in turn will jump to the next
- (if any) alternative's such jump, etc.). The last such
- jump jumps to the correct final destination. A picture:
- _____ _____
- | | | |
- | v | v
- a | b | c
-
- If we are at `b', then fixup_alt_jump right now points to a
- three-byte space after `a'. We'll put in the jump, set
- fixup_alt_jump to right after `b', and leave behind three
- bytes which we'll fill in when we get to after `c'. */
-
- if (fixup_alt_jump)
- STORE_JUMP (jump_past_alt, fixup_alt_jump, b);
-
- /* Mark and leave space for a jump after this alternative,
- to be filled in later either by next alternative or
- when know we're at the end of a series of alternatives. */
- fixup_alt_jump = b;
- GET_BUFFER_SPACE (3);
- b += 3;
-
- laststart = 0;
- begalt = b;
- break;
-
-
- case '{':
- /* If \{ is a literal. */
- if (!(syntax & RE_INTERVALS)
- /* If we're at `\{' and it's not the open-interval
- operator. */
- || ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))
- || (p - 2 == pattern && p == pend))
- goto normal_backslash;
-
- handle_interval:
- {
- /* If got here, then the syntax allows intervals. */
-
- /* At least (most) this many matches must be made. */
- int lower_bound = -1, upper_bound = -1;
-
- beg_interval = p - 1;
-
- if (p == pend)
- {
- if (syntax & RE_NO_BK_BRACES)
- goto unfetch_interval;
- else
- FREE_STACK_RETURN (REG_EBRACE);
- }
-
- GET_UNSIGNED_NUMBER (lower_bound);
-
- if (c == ',')
- {
- GET_UNSIGNED_NUMBER (upper_bound);
- if (upper_bound < 0) upper_bound = RE_DUP_MAX;
- }
- else
- /* Interval such as `{1}' => match exactly once. */
- upper_bound = lower_bound;
-
- if (lower_bound < 0 || upper_bound > RE_DUP_MAX
- || lower_bound > upper_bound)
- {
- if (syntax & RE_NO_BK_BRACES)
- goto unfetch_interval;
- else
- FREE_STACK_RETURN (REG_BADBR);
- }
-
- if (!(syntax & RE_NO_BK_BRACES))
- {
- if (c != '\\') FREE_STACK_RETURN (REG_EBRACE);
-
- PATFETCH (c);
- }
-
- if (c != '}')
- {
- if (syntax & RE_NO_BK_BRACES)
- goto unfetch_interval;
- else
- FREE_STACK_RETURN (REG_BADBR);
- }
-
- /* We just parsed a valid interval. */
-
- /* If it's invalid to have no preceding re. */
- if (!laststart)
- {
- if (syntax & RE_CONTEXT_INVALID_OPS)
- FREE_STACK_RETURN (REG_BADRPT);
- else if (syntax & RE_CONTEXT_INDEP_OPS)
- laststart = b;
- else
- goto unfetch_interval;
- }
-
- /* If the upper bound is zero, don't want to succeed at
- all; jump from `laststart' to `b + 3', which will be
- the end of the buffer after we insert the jump. */
- if (upper_bound == 0)
- {
- GET_BUFFER_SPACE (3);
- INSERT_JUMP (jump, laststart, b + 3);
- b += 3;
- }
-
- /* Otherwise, we have a nontrivial interval. When
- we're all done, the pattern will look like:
- set_number_at <jump count> <upper bound>
- set_number_at <succeed_n count> <lower bound>
- succeed_n <after jump addr> <succeed_n count>
- <body of loop>
- jump_n <succeed_n addr> <jump count>
- (The upper bound and `jump_n' are omitted if
- `upper_bound' is 1, though.) */
- else
- { /* If the upper bound is > 1, we need to insert
- more at the end of the loop. */
- unsigned nbytes = 10 + (upper_bound > 1) * 10;
-
- GET_BUFFER_SPACE (nbytes);
-
- /* Initialize lower bound of the `succeed_n', even
- though it will be set during matching by its
- attendant `set_number_at' (inserted next),
- because `re_compile_fastmap' needs to know.
- Jump to the `jump_n' we might insert below. */
- INSERT_JUMP2 (succeed_n, laststart,
- b + 5 + (upper_bound > 1) * 5,
- lower_bound);
- b += 5;
-
- /* Code to initialize the lower bound. Insert
- before the `succeed_n'. The `5' is the last two
- bytes of this `set_number_at', plus 3 bytes of
- the following `succeed_n'. */
- insert_op2 (set_number_at, laststart, 5, lower_bound, b);
- b += 5;
-
- if (upper_bound > 1)
- { /* More than one repetition is allowed, so
- append a backward jump to the `succeed_n'
- that starts this interval.
-
- When we've reached this during matching,
- we'll have matched the interval once, so
- jump back only `upper_bound - 1' times. */
- STORE_JUMP2 (jump_n, b, laststart + 5,
- upper_bound - 1);
- b += 5;
-
- /* The location we want to set is the second
- parameter of the `jump_n'; that is `b-2' as
- an absolute address. `laststart' will be
- the `set_number_at' we're about to insert;
- `laststart+3' the number to set, the source
- for the relative address. But we are
- inserting into the middle of the pattern --
- so everything is getting moved up by 5.
- Conclusion: (b - 2) - (laststart + 3) + 5,
- i.e., b - laststart.
-
- We insert this at the beginning of the loop
- so that if we fail during matching, we'll
- reinitialize the bounds. */
- insert_op2 (set_number_at, laststart, b - laststart,
- upper_bound - 1, b);
- b += 5;
- }
- }
- pending_exact = 0;
- beg_interval = NULL;
- }
- break;
-
- unfetch_interval:
- /* If an invalid interval, match the characters as literals. */
- assert (beg_interval);
- p = beg_interval;
- beg_interval = NULL;
-
- /* normal_char and normal_backslash need `c'. */
- PATFETCH (c);
-
- if (!(syntax & RE_NO_BK_BRACES))
- {
- if (p > pattern && p[-1] == '\\')
- goto normal_backslash;
- }
- goto normal_char;
-
-#ifdef emacs
- /* There is no way to specify the before_dot and after_dot
- operators. rms says this is ok. --karl */
- case '=':
- BUF_PUSH (at_dot);
- break;
-
- case 's':
- laststart = b;
- PATFETCH (c);
- BUF_PUSH_2 (syntaxspec, syntax_spec_code[c]);
- break;
-
- case 'S':
- laststart = b;
- PATFETCH (c);
- BUF_PUSH_2 (notsyntaxspec, syntax_spec_code[c]);
- break;
-#endif /* emacs */
-
-
- case 'w':
- laststart = b;
- BUF_PUSH (wordchar);
- break;
-
-
- case 'W':
- laststart = b;
- BUF_PUSH (notwordchar);
- break;
-
-
- case '<':
- BUF_PUSH (wordbeg);
- break;
-
- case '>':
- BUF_PUSH (wordend);
- break;
-
- case 'b':
- BUF_PUSH (wordbound);
- break;
-
- case 'B':
- BUF_PUSH (notwordbound);
- break;
-
- case '`':
- BUF_PUSH (begbuf);
- break;
-
- case '\'':
- BUF_PUSH (endbuf);
- break;
-
- case '1': case '2': case '3': case '4': case '5':
- case '6': case '7': case '8': case '9':
- if (syntax & RE_NO_BK_REFS)
- goto normal_char;
-
- c1 = c - '0';
-
- if (c1 > regnum)
- FREE_STACK_RETURN (REG_ESUBREG);
-
- /* Can't back reference to a subexpression if inside of it. */
- if (group_in_compile_stack (compile_stack, c1))
- goto normal_char;
-
- laststart = b;
- BUF_PUSH_2 (duplicate, c1);
- break;
-
-
- case '+':
- case '?':
- if (syntax & RE_BK_PLUS_QM)
- goto handle_plus;
- else
- goto normal_backslash;
-
- default:
- normal_backslash:
- /* You might think it would be useful for \ to mean
- not to translate; but if we don't translate it
- it will never match anything. */
- c = TRANSLATE (c);
- goto normal_char;
- }
- break;
-
-
- default:
- /* Expects the character in `c'. */
- normal_char:
- /* If no exactn currently being built. */
- if (!pending_exact
-
- /* If last exactn not at current position. */
- || pending_exact + *pending_exact + 1 != b
-
- /* We have only one byte following the exactn for the count. */
- || *pending_exact == (1 << BYTEWIDTH) - 1
-
- /* If followed by a repetition operator. */
- || *p == '*' || *p == '^'
- || ((syntax & RE_BK_PLUS_QM)
- ? *p == '\\' && (p[1] == '+' || p[1] == '?')
- : (*p == '+' || *p == '?'))
- || ((syntax & RE_INTERVALS)
- && ((syntax & RE_NO_BK_BRACES)
- ? *p == '{'
- : (p[0] == '\\' && p[1] == '{'))))
- {
- /* Start building a new exactn. */
-
- laststart = b;
-
- BUF_PUSH_2 (exactn, 0);
- pending_exact = b - 1;
- }
-
- BUF_PUSH (c);
- (*pending_exact)++;
- break;
- } /* switch (c) */
- } /* while p != pend */
-
-
- /* Through the pattern now. */
-
- if (fixup_alt_jump)
- STORE_JUMP (jump_past_alt, fixup_alt_jump, b);
-
- if (!COMPILE_STACK_EMPTY)
- FREE_STACK_RETURN (REG_EPAREN);
-
- /* If we don't want backtracking, force success
- the first time we reach the end of the compiled pattern. */
- if (syntax & RE_NO_POSIX_BACKTRACKING)
- BUF_PUSH (succeed);
-
- free (compile_stack.stack);
-
- /* We have succeeded; set the length of the buffer. */
- bufp->used = b - bufp->buffer;
-
-#ifdef DEBUG
- if (debug)
- {
- DEBUG_PRINT1 ("\nCompiled pattern: \n");
- print_compiled_pattern (bufp);
- }
-#endif /* DEBUG */
-
-#ifndef MATCH_MAY_ALLOCATE
- /* Initialize the failure stack to the largest possible stack. This
- isn't necessary unless we're trying to avoid calling alloca in
- the search and match routines. */
- {
- int num_regs = bufp->re_nsub + 1;
-
- /* Since DOUBLE_FAIL_STACK refuses to double only if the current size
- is strictly greater than re_max_failures, the largest possible stack
- is 2 * re_max_failures failure points. */
- if (fail_stack.size < (2 * re_max_failures * MAX_FAILURE_ITEMS))
- {
- fail_stack.size = (2 * re_max_failures * MAX_FAILURE_ITEMS);
-
-#ifdef emacs
- if (! fail_stack.stack)
- fail_stack.stack
- = (fail_stack_elt_t *) xmalloc (fail_stack.size
- * sizeof (fail_stack_elt_t));
- else
- fail_stack.stack
- = (fail_stack_elt_t *) xrealloc (fail_stack.stack,
- (fail_stack.size
- * sizeof (fail_stack_elt_t)));
-#else /* not emacs */
- if (! fail_stack.stack)
- fail_stack.stack
- = (fail_stack_elt_t *) malloc (fail_stack.size
- * sizeof (fail_stack_elt_t));
- else
- fail_stack.stack
- = (fail_stack_elt_t *) realloc (fail_stack.stack,
- (fail_stack.size
- * sizeof (fail_stack_elt_t)));
-#endif /* not emacs */
- }
-
- regex_grow_registers (num_regs);
- }
-#endif /* not MATCH_MAY_ALLOCATE */
-
- return REG_NOERROR;
-} /* regex_compile */
-
-/* Subroutines for `regex_compile'. */
-
-/* Store OP at LOC followed by two-byte integer parameter ARG. */
-
-static void
-store_op1 (op, loc, arg)
- re_opcode_t op;
- unsigned char *loc;
- int arg;
-{
- *loc = (unsigned char) op;
- STORE_NUMBER (loc + 1, arg);
-}
-
-
-/* Like `store_op1', but for two two-byte parameters ARG1 and ARG2. */
-
-static void
-store_op2 (op, loc, arg1, arg2)
- re_opcode_t op;
- unsigned char *loc;
- int arg1, arg2;
-{
- *loc = (unsigned char) op;
- STORE_NUMBER (loc + 1, arg1);
- STORE_NUMBER (loc + 3, arg2);
-}
-
-
-/* Copy the bytes from LOC to END to open up three bytes of space at LOC
- for OP followed by two-byte integer parameter ARG. */
-
-static void
-insert_op1 (op, loc, arg, end)
- re_opcode_t op;
- unsigned char *loc;
- int arg;
- unsigned char *end;
-{
- register unsigned char *pfrom = end;
- register unsigned char *pto = end + 3;
-
- while (pfrom != loc)
- *--pto = *--pfrom;
-
- store_op1 (op, loc, arg);
-}
-
-
-/* Like `insert_op1', but for two two-byte parameters ARG1 and ARG2. */
-
-static void
-insert_op2 (op, loc, arg1, arg2, end)
- re_opcode_t op;
- unsigned char *loc;
- int arg1, arg2;
- unsigned char *end;
-{
- register unsigned char *pfrom = end;
- register unsigned char *pto = end + 5;
-
- while (pfrom != loc)
- *--pto = *--pfrom;
-
- store_op2 (op, loc, arg1, arg2);
-}
-
-
-/* P points to just after a ^ in PATTERN. Return true if that ^ comes
- after an alternative or a begin-subexpression. We assume there is at
- least one character before the ^. */
-
-static boolean
-at_begline_loc_p (pattern, p, syntax)
- const char *pattern, *p;
- reg_syntax_t syntax;
-{
- const char *prev = p - 2;
- boolean prev_prev_backslash = prev > pattern && prev[-1] == '\\';
-
- return
- /* After a subexpression? */
- (*prev == '(' && (syntax & RE_NO_BK_PARENS || prev_prev_backslash))
- /* After an alternative? */
- || (*prev == '|' && (syntax & RE_NO_BK_VBAR || prev_prev_backslash));
-}
-
-
-/* The dual of at_begline_loc_p. This one is for $. We assume there is
- at least one character after the $, i.e., `P < PEND'. */
-
-static boolean
-at_endline_loc_p (p, pend, syntax)
- const char *p, *pend;
- int syntax;
-{
- const char *next = p;
- boolean next_backslash = *next == '\\';
- const char *next_next = p + 1 < pend ? p + 1 : 0;
-
- return
- /* Before a subexpression? */
- (syntax & RE_NO_BK_PARENS ? *next == ')'
- : next_backslash && next_next && *next_next == ')')
- /* Before an alternative? */
- || (syntax & RE_NO_BK_VBAR ? *next == '|'
- : next_backslash && next_next && *next_next == '|');
-}
-
-
-/* Returns true if REGNUM is in one of COMPILE_STACK's elements and
- false if it's not. */
-
-static boolean
-group_in_compile_stack (compile_stack, regnum)
- compile_stack_type compile_stack;
- regnum_t regnum;
-{
- int this_element;
-
- for (this_element = compile_stack.avail - 1;
- this_element >= 0;
- this_element--)
- if (compile_stack.stack[this_element].regnum == regnum)
- return true;
-
- return false;
-}
-
-
-/* Read the ending character of a range (in a bracket expression) from the
- uncompiled pattern *P_PTR (which ends at PEND). We assume the
- starting character is in `P[-2]'. (`P[-1]' is the character `-'.)
- Then we set the translation of all bits between the starting and
- ending characters (inclusive) in the compiled pattern B.
-
- Return an error code.
-
- We use these short variable names so we can use the same macros as
- `regex_compile' itself. */
-
-static reg_errcode_t
-compile_range (p_ptr, pend, translate, syntax, b)
- const char **p_ptr, *pend;
- RE_TRANSLATE_TYPE translate;
- reg_syntax_t syntax;
- unsigned char *b;
-{
- unsigned this_char;
-
- const char *p = *p_ptr;
- int range_start, range_end;
-
- if (p == pend)
- return REG_ERANGE;
-
- /* Even though the pattern is a signed `char *', we need to fetch
- with unsigned char *'s; if the high bit of the pattern character
- is set, the range endpoints will be negative if we fetch using a
- signed char *.
-
- We also want to fetch the endpoints without translating them; the
- appropriate translation is done in the bit-setting loop below. */
- /* The SVR4 compiler on the 3B2 had trouble with unsigned const char *. */
- range_start = ((const unsigned char *) p)[-2];
- range_end = ((const unsigned char *) p)[0];
-
- /* Have to increment the pointer into the pattern string, so the
- caller isn't still at the ending character. */
- (*p_ptr)++;
-
- /* If the start is after the end, the range is empty. */
- if (range_start > range_end)
- return syntax & RE_NO_EMPTY_RANGES ? REG_ERANGE : REG_NOERROR;
-
- /* Here we see why `this_char' has to be larger than an `unsigned
- char' -- the range is inclusive, so if `range_end' == 0xff
- (assuming 8-bit characters), we would otherwise go into an infinite
- loop, since all characters <= 0xff. */
- for (this_char = range_start; this_char <= range_end; this_char++)
- {
- SET_LIST_BIT (TRANSLATE (this_char));
- }
-
- return REG_NOERROR;
-}
-
-/* re_compile_fastmap computes a ``fastmap'' for the compiled pattern in
- BUFP. A fastmap records which of the (1 << BYTEWIDTH) possible
- characters can start a string that matches the pattern. This fastmap
- is used by re_search to skip quickly over impossible starting points.
-
- The caller must supply the address of a (1 << BYTEWIDTH)-byte data
- area as BUFP->fastmap.
-
- We set the `fastmap', `fastmap_accurate', and `can_be_null' fields in
- the pattern buffer.
-
- Returns 0 if we succeed, -2 if an internal error. */
-
-int
-re_compile_fastmap (bufp)
- struct re_pattern_buffer *bufp;
-{
- int j, k;
-#ifdef MATCH_MAY_ALLOCATE
- fail_stack_type fail_stack;
-#endif
-#ifndef REGEX_MALLOC
- char *destination;
-#endif
- /* We don't push any register information onto the failure stack. */
- unsigned num_regs = 0;
-
- register char *fastmap = bufp->fastmap;
- unsigned char *pattern = bufp->buffer;
- unsigned long size = bufp->used;
- unsigned char *p = pattern;
- register unsigned char *pend = pattern + size;
-
- /* This holds the pointer to the failure stack, when
- it is allocated relocatably. */
-#ifdef REL_ALLOC
- fail_stack_elt_t *failure_stack_ptr;
-#endif
-
- /* Assume that each path through the pattern can be null until
- proven otherwise. We set this false at the bottom of switch
- statement, to which we get only if a particular path doesn't
- match the empty string. */
- boolean path_can_be_null = true;
-
- /* We aren't doing a `succeed_n' to begin with. */
- boolean succeed_n_p = false;
-
- assert (fastmap != NULL && p != NULL);
-
- INIT_FAIL_STACK ();
- bzero (fastmap, 1 << BYTEWIDTH); /* Assume nothing's valid. */
- bufp->fastmap_accurate = 1; /* It will be when we're done. */
- bufp->can_be_null = 0;
-
- while (1)
- {
- if (p == pend || *p == succeed)
- {
- /* We have reached the (effective) end of pattern. */
- if (!FAIL_STACK_EMPTY ())
- {
- bufp->can_be_null |= path_can_be_null;
-
- /* Reset for next path. */
- path_can_be_null = true;
-
- p = fail_stack.stack[--fail_stack.avail].pointer;
-
- continue;
- }
- else
- break;
- }
-
- /* We should never be about to go beyond the end of the pattern. */
- assert (p < pend);
-
- switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++))
- {
-
- /* I guess the idea here is to simply not bother with a fastmap
- if a backreference is used, since it's too hard to figure out
- the fastmap for the corresponding group. Setting
- `can_be_null' stops `re_search_2' from using the fastmap, so
- that is all we do. */
- case duplicate:
- bufp->can_be_null = 1;
- goto done;
-
-
- /* Following are the cases which match a character. These end
- with `break'. */
-
- case exactn:
- fastmap[p[1]] = 1;
- break;
-
-
- case charset:
- for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
- if (p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH)))
- fastmap[j] = 1;
- break;
-
-
- case charset_not:
- /* Chars beyond end of map must be allowed. */
- for (j = *p * BYTEWIDTH; j < (1 << BYTEWIDTH); j++)
- fastmap[j] = 1;
-
- for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
- if (!(p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))))
- fastmap[j] = 1;
- break;
-
-
- case wordchar:
- for (j = 0; j < (1 << BYTEWIDTH); j++)
- if (SYNTAX (j) == Sword)
- fastmap[j] = 1;
- break;
-
-
- case notwordchar:
- for (j = 0; j < (1 << BYTEWIDTH); j++)
- if (SYNTAX (j) != Sword)
- fastmap[j] = 1;
- break;
-
-
- case anychar:
- {
- int fastmap_newline = fastmap['\n'];
-
- /* `.' matches anything ... */
- for (j = 0; j < (1 << BYTEWIDTH); j++)
- fastmap[j] = 1;
-
- /* ... except perhaps newline. */
- if (!(bufp->syntax & RE_DOT_NEWLINE))
- fastmap['\n'] = fastmap_newline;
-
- /* Return if we have already set `can_be_null'; if we have,
- then the fastmap is irrelevant. Something's wrong here. */
- else if (bufp->can_be_null)
- goto done;
-
- /* Otherwise, have to check alternative paths. */
- break;
- }
-
-#ifdef emacs
- case syntaxspec:
- k = *p++;
- for (j = 0; j < (1 << BYTEWIDTH); j++)
- if (SYNTAX (j) == (enum syntaxcode) k)
- fastmap[j] = 1;
- break;
-
-
- case notsyntaxspec:
- k = *p++;
- for (j = 0; j < (1 << BYTEWIDTH); j++)
- if (SYNTAX (j) != (enum syntaxcode) k)
- fastmap[j] = 1;
- break;
-
-
- /* All cases after this match the empty string. These end with
- `continue'. */
-
-
- case before_dot:
- case at_dot:
- case after_dot:
- continue;
-#endif /* emacs */
-
-
- case no_op:
- case begline:
- case endline:
- case begbuf:
- case endbuf:
- case wordbound:
- case notwordbound:
- case wordbeg:
- case wordend:
- case push_dummy_failure:
- continue;
-
-
- case jump_n:
- case pop_failure_jump:
- case maybe_pop_jump:
- case jump:
- case jump_past_alt:
- case dummy_failure_jump:
- EXTRACT_NUMBER_AND_INCR (j, p);
- p += j;
- if (j > 0)
- continue;
-
- /* Jump backward implies we just went through the body of a
- loop and matched nothing. Opcode jumped to should be
- `on_failure_jump' or `succeed_n'. Just treat it like an
- ordinary jump. For a * loop, it has pushed its failure
- point already; if so, discard that as redundant. */
- if ((re_opcode_t) *p != on_failure_jump
- && (re_opcode_t) *p != succeed_n)
- continue;
-
- p++;
- EXTRACT_NUMBER_AND_INCR (j, p);
- p += j;
-
- /* If what's on the stack is where we are now, pop it. */
- if (!FAIL_STACK_EMPTY ()
- && fail_stack.stack[fail_stack.avail - 1].pointer == p)
- fail_stack.avail--;
-
- continue;
-
-
- case on_failure_jump:
- case on_failure_keep_string_jump:
- handle_on_failure_jump:
- EXTRACT_NUMBER_AND_INCR (j, p);
-
- /* For some patterns, e.g., `(a?)?', `p+j' here points to the
- end of the pattern. We don't want to push such a point,
- since when we restore it above, entering the switch will
- increment `p' past the end of the pattern. We don't need
- to push such a point since we obviously won't find any more
- fastmap entries beyond `pend'. Such a pattern can match
- the null string, though. */
- if (p + j < pend)
- {
- if (!PUSH_PATTERN_OP (p + j, fail_stack))
- {
- RESET_FAIL_STACK ();
- return -2;
- }
- }
- else
- bufp->can_be_null = 1;
-
- if (succeed_n_p)
- {
- EXTRACT_NUMBER_AND_INCR (k, p); /* Skip the n. */
- succeed_n_p = false;
- }
-
- continue;
-
-
- case succeed_n:
- /* Get to the number of times to succeed. */
- p += 2;
-
- /* Increment p past the n for when k != 0. */
- EXTRACT_NUMBER_AND_INCR (k, p);
- if (k == 0)
- {
- p -= 4;
- succeed_n_p = true; /* Spaghetti code alert. */
- goto handle_on_failure_jump;
- }
- continue;
-
-
- case set_number_at:
- p += 4;
- continue;
-
-
- case start_memory:
- case stop_memory:
- p += 2;
- continue;
-
-
- default:
- abort (); /* We have listed all the cases. */
- } /* switch *p++ */
-
- /* Getting here means we have found the possible starting
- characters for one path of the pattern -- and that the empty
- string does not match. We need not follow this path further.
- Instead, look at the next alternative (remembered on the
- stack), or quit if no more. The test at the top of the loop
- does these things. */
- path_can_be_null = false;
- p = pend;
- } /* while p */
-
- /* Set `can_be_null' for the last path (also the first path, if the
- pattern is empty). */
- bufp->can_be_null |= path_can_be_null;
-
- done:
- RESET_FAIL_STACK ();
- return 0;
-} /* re_compile_fastmap */
-
-/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
- ENDS. Subsequent matches using PATTERN_BUFFER and REGS will use
- this memory for recording register information. STARTS and ENDS
- must be allocated using the malloc library routine, and must each
- be at least NUM_REGS * sizeof (regoff_t) bytes long.
-
- If NUM_REGS == 0, then subsequent matches should allocate their own
- register data.
-
- Unless this function is called, the first search or match using
- PATTERN_BUFFER will allocate its own register data, without
- freeing the old data. */
-
-void
-re_set_registers (bufp, regs, num_regs, starts, ends)
- struct re_pattern_buffer *bufp;
- struct re_registers *regs;
- unsigned num_regs;
- regoff_t *starts, *ends;
-{
- if (num_regs)
- {
- bufp->regs_allocated = REGS_REALLOCATE;
- regs->num_regs = num_regs;
- regs->start = starts;
- regs->end = ends;
- }
- else
- {
- bufp->regs_allocated = REGS_UNALLOCATED;
- regs->num_regs = 0;
- regs->start = regs->end = (regoff_t *) 0;
- }
-}
-
-/* Searching routines. */
-
-/* Like re_search_2, below, but only one string is specified, and
- doesn't let you say where to stop matching. */
-
-int
-re_search (bufp, string, size, startpos, range, regs)
- struct re_pattern_buffer *bufp;
- const char *string;
- int size, startpos, range;
- struct re_registers *regs;
-{
- return re_search_2 (bufp, NULL, 0, string, size, startpos, range,
- regs, size);
-}
-
-
-/* Using the compiled pattern in BUFP->buffer, first tries to match the
- virtual concatenation of STRING1 and STRING2, starting first at index
- STARTPOS, then at STARTPOS + 1, and so on.
-
- STRING1 and STRING2 have length SIZE1 and SIZE2, respectively.
-
- RANGE is how far to scan while trying to match. RANGE = 0 means try
- only at STARTPOS; in general, the last start tried is STARTPOS +
- RANGE.
-
- In REGS, return the indices of the virtual concatenation of STRING1
- and STRING2 that matched the entire BUFP->buffer and its contained
- subexpressions.
-
- Do not consider matching one past the index STOP in the virtual
- concatenation of STRING1 and STRING2.
-
- We return either the position in the strings at which the match was
- found, -1 if no match, or -2 if error (such as failure
- stack overflow). */
-
-int
-re_search_2 (bufp, string1, size1, string2, size2, startpos, range, regs, stop)
- struct re_pattern_buffer *bufp;
- const char *string1, *string2;
- int size1, size2;
- int startpos;
- int range;
- struct re_registers *regs;
- int stop;
-{
- int val;
- register char *fastmap = bufp->fastmap;
- register RE_TRANSLATE_TYPE translate = bufp->translate;
- int total_size = size1 + size2;
- int endpos = startpos + range;
- int anchored_start = 0;
-
- /* Check for out-of-range STARTPOS. */
- if (startpos < 0 || startpos > total_size)
- return -1;
-
- /* Fix up RANGE if it might eventually take us outside
- the virtual concatenation of STRING1 and STRING2.
- Make sure we won't move STARTPOS below 0 or above TOTAL_SIZE. */
- if (endpos < 0)
- range = 0 - startpos;
- else if (endpos > total_size)
- range = total_size - startpos;
-
- /* If the search isn't to be a backwards one, don't waste time in a
- search for a pattern that must be anchored. */
- if (bufp->used > 0 && (re_opcode_t) bufp->buffer[0] == begbuf && range > 0)
- {
- if (startpos > 0)
- return -1;
- else
- range = 1;
- }
-
-#ifdef emacs
- /* In a forward search for something that starts with \=.
- don't keep searching past point. */
- if (bufp->used > 0 && (re_opcode_t) bufp->buffer[0] == at_dot && range > 0)
- {
- range = PT - startpos;
- if (range <= 0)
- return -1;
- }
-#endif /* emacs */
-
- /* Update the fastmap now if not correct already. */
- if (fastmap && !bufp->fastmap_accurate)
- if (re_compile_fastmap (bufp) == -2)
- return -2;
-
- /* See whether the pattern is anchored. */
- if (bufp->buffer[0] == begline)
- anchored_start = 1;
-
- /* Loop through the string, looking for a place to start matching. */
- for (;;)
- {
- /* If the pattern is anchored,
- skip quickly past places we cannot match.
- We don't bother to treat startpos == 0 specially
- because that case doesn't repeat. */
- if (anchored_start && startpos > 0)
- {
- if (! (bufp->newline_anchor
- && ((startpos <= size1 ? string1[startpos - 1]
- : string2[startpos - size1 - 1])
- == '\n')))
- goto advance;
- }
-
- /* If a fastmap is supplied, skip quickly over characters that
- cannot be the start of a match. If the pattern can match the
- null string, however, we don't need to skip characters; we want
- the first null string. */
- if (fastmap && startpos < total_size && !bufp->can_be_null)
- {
- if (range > 0) /* Searching forwards. */
- {
- register const char *d;
- register int lim = 0;
- int irange = range;
-
- if (startpos < size1 && startpos + range >= size1)
- lim = range - (size1 - startpos);
-
- d = (startpos >= size1 ? string2 - size1 : string1) + startpos;
-
- /* Written out as an if-else to avoid testing `translate'
- inside the loop. */
- if (translate)
- while (range > lim
- && !fastmap[(unsigned char)
- translate[(unsigned char) *d++]])
- range--;
- else
- while (range > lim && !fastmap[(unsigned char) *d++])
- range--;
-
- startpos += irange - range;
- }
- else /* Searching backwards. */
- {
- register char c = (size1 == 0 || startpos >= size1
- ? string2[startpos - size1]
- : string1[startpos]);
-
- if (!fastmap[(unsigned char) TRANSLATE (c)])
- goto advance;
- }
- }
-
- /* If can't match the null string, and that's all we have left, fail. */
- if (range >= 0 && startpos == total_size && fastmap
- && !bufp->can_be_null)
- return -1;
-
- val = re_match_2_internal (bufp, string1, size1, string2, size2,
- startpos, regs, stop);
-#ifndef REGEX_MALLOC
-#ifdef C_ALLOCA
- alloca (0);
-#endif
-#endif
-
- if (val >= 0)
- return startpos;
-
- if (val == -2)
- return -2;
-
- advance:
- if (!range)
- break;
- else if (range > 0)
- {
- range--;
- startpos++;
- }
- else
- {
- range++;
- startpos--;
- }
- }
- return -1;
-} /* re_search_2 */
-
-/* Declarations and macros for re_match_2. */
-
-static int bcmp_translate ();
-static boolean alt_match_null_string_p (),
- common_op_match_null_string_p (),
- group_match_null_string_p ();
-
-/* This converts PTR, a pointer into one of the search strings `string1'
- and `string2' into an offset from the beginning of that string. */
-#define POINTER_TO_OFFSET(ptr) \
- (FIRST_STRING_P (ptr) \
- ? ((regoff_t) ((ptr) - string1)) \
- : ((regoff_t) ((ptr) - string2 + size1)))
-
-/* Macros for dealing with the split strings in re_match_2. */
-
-#define MATCHING_IN_FIRST_STRING (dend == end_match_1)
-
-/* Call before fetching a character with *d. This switches over to
- string2 if necessary. */
-#define PREFETCH() \
- while (d == dend) \
- { \
- /* End of string2 => fail. */ \
- if (dend == end_match_2) \
- goto fail; \
- /* End of string1 => advance to string2. */ \
- d = string2; \
- dend = end_match_2; \
- }
-
-
-/* Test if at very beginning or at very end of the virtual concatenation
- of `string1' and `string2'. If only one string, it's `string2'. */
-#define AT_STRINGS_BEG(d) ((d) == (size1 ? string1 : string2) || !size2)
-#define AT_STRINGS_END(d) ((d) == end2)
-
-
-/* Test if D points to a character which is word-constituent. We have
- two special cases to check for: if past the end of string1, look at
- the first character in string2; and if before the beginning of
- string2, look at the last character in string1. */
-#define WORDCHAR_P(d) \
- (SYNTAX ((d) == end1 ? *string2 \
- : (d) == string2 - 1 ? *(end1 - 1) : *(d)) \
- == Sword)
-
-/* Disabled due to a compiler bug -- see comment at case wordbound */
-#if 0
-/* Test if the character before D and the one at D differ with respect
- to being word-constituent. */
-#define AT_WORD_BOUNDARY(d) \
- (AT_STRINGS_BEG (d) || AT_STRINGS_END (d) \
- || WORDCHAR_P (d - 1) != WORDCHAR_P (d))
-#endif
-
-/* Free everything we malloc. */
-#ifdef MATCH_MAY_ALLOCATE
-#define FREE_VAR(var) if (var) { REGEX_FREE (var); var = NULL; } else
-#define FREE_VARIABLES() \
- do { \
- REGEX_FREE_STACK (fail_stack.stack); \
- FREE_VAR (regstart); \
- FREE_VAR (regend); \
- FREE_VAR (old_regstart); \
- FREE_VAR (old_regend); \
- FREE_VAR (best_regstart); \
- FREE_VAR (best_regend); \
- FREE_VAR (reg_info); \
- FREE_VAR (reg_dummy); \
- FREE_VAR (reg_info_dummy); \
- } while (0)
-#else
-#define FREE_VARIABLES() ((void)0) /* Do nothing! But inhibit gcc warning. */
-#endif /* not MATCH_MAY_ALLOCATE */
-
-/* These values must meet several constraints. They must not be valid
- register values; since we have a limit of 255 registers (because
- we use only one byte in the pattern for the register number), we can
- use numbers larger than 255. They must differ by 1, because of
- NUM_FAILURE_ITEMS above. And the value for the lowest register must
- be larger than the value for the highest register, so we do not try
- to actually save any registers when none are active. */
-#define NO_HIGHEST_ACTIVE_REG (1 << BYTEWIDTH)
-#define NO_LOWEST_ACTIVE_REG (NO_HIGHEST_ACTIVE_REG + 1)
-
-/* Matching routines. */
-
-#ifndef emacs /* Emacs never uses this. */
-/* re_match is like re_match_2 except it takes only a single string. */
-
-int
-re_match (bufp, string, size, pos, regs)
- struct re_pattern_buffer *bufp;
- const char *string;
- int size, pos;
- struct re_registers *regs;
-{
- int result = re_match_2_internal (bufp, NULL, 0, string, size,
- pos, regs, size);
- alloca (0);
- return result;
-}
-#endif /* not emacs */
-
-
-/* re_match_2 matches the compiled pattern in BUFP against the
- the (virtual) concatenation of STRING1 and STRING2 (of length SIZE1
- and SIZE2, respectively). We start matching at POS, and stop
- matching at STOP.
-
- If REGS is non-null and the `no_sub' field of BUFP is nonzero, we
- store offsets for the substring each group matched in REGS. See the
- documentation for exactly how many groups we fill.
-
- We return -1 if no match, -2 if an internal error (such as the
- failure stack overflowing). Otherwise, we return the length of the
- matched substring. */
-
-int
-re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
- struct re_pattern_buffer *bufp;
- const char *string1, *string2;
- int size1, size2;
- int pos;
- struct re_registers *regs;
- int stop;
-{
- int result = re_match_2_internal (bufp, string1, size1, string2, size2,
- pos, regs, stop);
- alloca (0);
- return result;
-}
-
-/* This is a separate function so that we can force an alloca cleanup
- afterwards. */
-static int
-re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop)
- struct re_pattern_buffer *bufp;
- const char *string1, *string2;
- int size1, size2;
- int pos;
- struct re_registers *regs;
- int stop;
-{
- /* General temporaries. */
- int mcnt;
- unsigned char *p1;
-
- /* Just past the end of the corresponding string. */
- const char *end1, *end2;
-
- /* Pointers into string1 and string2, just past the last characters in
- each to consider matching. */
- const char *end_match_1, *end_match_2;
-
- /* Where we are in the data, and the end of the current string. */
- const char *d, *dend;
-
- /* Where we are in the pattern, and the end of the pattern. */
- unsigned char *p = bufp->buffer;
- register unsigned char *pend = p + bufp->used;
-
- /* Mark the opcode just after a start_memory, so we can test for an
- empty subpattern when we get to the stop_memory. */
- unsigned char *just_past_start_mem = 0;
-
- /* We use this to map every character in the string. */
- RE_TRANSLATE_TYPE translate = bufp->translate;
-
- /* Failure point stack. Each place that can handle a failure further
- down the line pushes a failure point on this stack. It consists of
- restart, regend, and reg_info for all registers corresponding to
- the subexpressions we're currently inside, plus the number of such
- registers, and, finally, two char *'s. The first char * is where
- to resume scanning the pattern; the second one is where to resume
- scanning the strings. If the latter is zero, the failure point is
- a ``dummy''; if a failure happens and the failure point is a dummy,
- it gets discarded and the next next one is tried. */
-#ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global. */
- fail_stack_type fail_stack;
-#endif
-#ifdef DEBUG
- static unsigned failure_id = 0;
- unsigned nfailure_points_pushed = 0, nfailure_points_popped = 0;
-#endif
-
- /* This holds the pointer to the failure stack, when
- it is allocated relocatably. */
-#ifdef REL_ALLOC
- fail_stack_elt_t *failure_stack_ptr;
-#endif
-
- /* We fill all the registers internally, independent of what we
- return, for use in backreferences. The number here includes
- an element for register zero. */
- unsigned num_regs = bufp->re_nsub + 1;
-
- /* The currently active registers. */
- unsigned lowest_active_reg = NO_LOWEST_ACTIVE_REG;
- unsigned highest_active_reg = NO_HIGHEST_ACTIVE_REG;
-
- /* Information on the contents of registers. These are pointers into
- the input strings; they record just what was matched (on this
- attempt) by a subexpression part of the pattern, that is, the
- regnum-th regstart pointer points to where in the pattern we began
- matching and the regnum-th regend points to right after where we
- stopped matching the regnum-th subexpression. (The zeroth register
- keeps track of what the whole pattern matches.) */
-#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */
- const char **regstart, **regend;
-#endif
-
- /* If a group that's operated upon by a repetition operator fails to
- match anything, then the register for its start will need to be
- restored because it will have been set to wherever in the string we
- are when we last see its open-group operator. Similarly for a
- register's end. */
-#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */
- const char **old_regstart, **old_regend;
-#endif
-
- /* The is_active field of reg_info helps us keep track of which (possibly
- nested) subexpressions we are currently in. The matched_something
- field of reg_info[reg_num] helps us tell whether or not we have
- matched any of the pattern so far this time through the reg_num-th
- subexpression. These two fields get reset each time through any
- loop their register is in. */
-#ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global. */
- register_info_type *reg_info;
-#endif
-
- /* The following record the register info as found in the above
- variables when we find a match better than any we've seen before.
- This happens as we backtrack through the failure points, which in
- turn happens only if we have not yet matched the entire string. */
- unsigned best_regs_set = false;
-#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */
- const char **best_regstart, **best_regend;
-#endif
-
- /* Logically, this is `best_regend[0]'. But we don't want to have to
- allocate space for that if we're not allocating space for anything
- else (see below). Also, we never need info about register 0 for
- any of the other register vectors, and it seems rather a kludge to
- treat `best_regend' differently than the rest. So we keep track of
- the end of the best match so far in a separate variable. We
- initialize this to NULL so that when we backtrack the first time
- and need to test it, it's not garbage. */
- const char *match_end = NULL;
-
- /* This helps SET_REGS_MATCHED avoid doing redundant work. */
- int set_regs_matched_done = 0;
-
- /* Used when we pop values we don't care about. */
-#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */
- const char **reg_dummy;
- register_info_type *reg_info_dummy;
-#endif
-
-#ifdef DEBUG
- /* Counts the total number of registers pushed. */
- unsigned num_regs_pushed = 0;
-#endif
-
- DEBUG_PRINT1 ("\n\nEntering re_match_2.\n");
-
- INIT_FAIL_STACK ();
-
-#ifdef MATCH_MAY_ALLOCATE
- /* Do not bother to initialize all the register variables if there are
- no groups in the pattern, as it takes a fair amount of time. If
- there are groups, we include space for register 0 (the whole
- pattern), even though we never use it, since it simplifies the
- array indexing. We should fix this. */
- if (bufp->re_nsub)
- {
- regstart = REGEX_TALLOC (num_regs, const char *);
- regend = REGEX_TALLOC (num_regs, const char *);
- old_regstart = REGEX_TALLOC (num_regs, const char *);
- old_regend = REGEX_TALLOC (num_regs, const char *);
- best_regstart = REGEX_TALLOC (num_regs, const char *);
- best_regend = REGEX_TALLOC (num_regs, const char *);
- reg_info = REGEX_TALLOC (num_regs, register_info_type);
- reg_dummy = REGEX_TALLOC (num_regs, const char *);
- reg_info_dummy = REGEX_TALLOC (num_regs, register_info_type);
-
- if (!(regstart && regend && old_regstart && old_regend && reg_info
- && best_regstart && best_regend && reg_dummy && reg_info_dummy))
- {
- FREE_VARIABLES ();
- return -2;
- }
- }
- else
- {
- /* We must initialize all our variables to NULL, so that
- `FREE_VARIABLES' doesn't try to free them. */
- regstart = regend = old_regstart = old_regend = best_regstart
- = best_regend = reg_dummy = NULL;
- reg_info = reg_info_dummy = (register_info_type *) NULL;
- }
-#endif /* MATCH_MAY_ALLOCATE */
-
- /* The starting position is bogus. */
- if (pos < 0 || pos > size1 + size2)
- {
- FREE_VARIABLES ();
- return -1;
- }
-
- /* Initialize subexpression text positions to -1 to mark ones that no
- start_memory/stop_memory has been seen for. Also initialize the
- register information struct. */
- for (mcnt = 1; mcnt < num_regs; mcnt++)
- {
- regstart[mcnt] = regend[mcnt]
- = old_regstart[mcnt] = old_regend[mcnt] = REG_UNSET_VALUE;
-
- REG_MATCH_NULL_STRING_P (reg_info[mcnt]) = MATCH_NULL_UNSET_VALUE;
- IS_ACTIVE (reg_info[mcnt]) = 0;
- MATCHED_SOMETHING (reg_info[mcnt]) = 0;
- EVER_MATCHED_SOMETHING (reg_info[mcnt]) = 0;
- }
-
- /* We move `string1' into `string2' if the latter's empty -- but not if
- `string1' is null. */
- if (size2 == 0 && string1 != NULL)
- {
- string2 = string1;
- size2 = size1;
- string1 = 0;
- size1 = 0;
- }
- end1 = string1 + size1;
- end2 = string2 + size2;
-
- /* Compute where to stop matching, within the two strings. */
- if (stop <= size1)
- {
- end_match_1 = string1 + stop;
- end_match_2 = string2;
- }
- else
- {
- end_match_1 = end1;
- end_match_2 = string2 + stop - size1;
- }
-
- /* `p' scans through the pattern as `d' scans through the data.
- `dend' is the end of the input string that `d' points within. `d'
- is advanced into the following input string whenever necessary, but
- this happens before fetching; therefore, at the beginning of the
- loop, `d' can be pointing at the end of a string, but it cannot
- equal `string2'. */
- if (size1 > 0 && pos <= size1)
- {
- d = string1 + pos;
- dend = end_match_1;
- }
- else
- {
- d = string2 + pos - size1;
- dend = end_match_2;
- }
-
- DEBUG_PRINT1 ("The compiled pattern is: ");
- DEBUG_PRINT_COMPILED_PATTERN (bufp, p, pend);
- DEBUG_PRINT1 ("The string to match is: `");
- DEBUG_PRINT_DOUBLE_STRING (d, string1, size1, string2, size2);
- DEBUG_PRINT1 ("'\n");
-
- /* This loops over pattern commands. It exits by returning from the
- function if the match is complete, or it drops through if the match
- fails at this starting point in the input data. */
- for (;;)
- {
- DEBUG_PRINT2 ("\n0x%x: ", p);
-
- if (p == pend)
- { /* End of pattern means we might have succeeded. */
- DEBUG_PRINT1 ("end of pattern ... ");
-
- /* If we haven't matched the entire string, and we want the
- longest match, try backtracking. */
- if (d != end_match_2)
- {
- /* 1 if this match ends in the same string (string1 or string2)
- as the best previous match. */
- boolean same_str_p = (FIRST_STRING_P (match_end)
- == MATCHING_IN_FIRST_STRING);
- /* 1 if this match is the best seen so far. */
- boolean best_match_p;
-
- /* AIX compiler got confused when this was combined
- with the previous declaration. */
- if (same_str_p)
- best_match_p = d > match_end;
- else
- best_match_p = !MATCHING_IN_FIRST_STRING;
-
- DEBUG_PRINT1 ("backtracking.\n");
-
- if (!FAIL_STACK_EMPTY ())
- { /* More failure points to try. */
-
- /* If exceeds best match so far, save it. */
- if (!best_regs_set || best_match_p)
- {
- best_regs_set = true;
- match_end = d;
-
- DEBUG_PRINT1 ("\nSAVING match as best so far.\n");
-
- for (mcnt = 1; mcnt < num_regs; mcnt++)
- {
- best_regstart[mcnt] = regstart[mcnt];
- best_regend[mcnt] = regend[mcnt];
- }
- }
- goto fail;
- }
-
- /* If no failure points, don't restore garbage. And if
- last match is real best match, don't restore second
- best one. */
- else if (best_regs_set && !best_match_p)
- {
- restore_best_regs:
- /* Restore best match. It may happen that `dend ==
- end_match_1' while the restored d is in string2.
- For example, the pattern `x.*y.*z' against the
- strings `x-' and `y-z-', if the two strings are
- not consecutive in memory. */
- DEBUG_PRINT1 ("Restoring best registers.\n");
-
- d = match_end;
- dend = ((d >= string1 && d <= end1)
- ? end_match_1 : end_match_2);
-
- for (mcnt = 1; mcnt < num_regs; mcnt++)
- {
- regstart[mcnt] = best_regstart[mcnt];
- regend[mcnt] = best_regend[mcnt];
- }
- }
- } /* d != end_match_2 */
-
- succeed_label:
- DEBUG_PRINT1 ("Accepting match.\n");
-
- /* If caller wants register contents data back, do it. */
- if (regs && !bufp->no_sub)
- {
- /* Have the register data arrays been allocated? */
- if (bufp->regs_allocated == REGS_UNALLOCATED)
- { /* No. So allocate them with malloc. We need one
- extra element beyond `num_regs' for the `-1' marker
- GNU code uses. */
- regs->num_regs = MAX (RE_NREGS, num_regs + 1);
- regs->start = TALLOC (regs->num_regs, regoff_t);
- regs->end = TALLOC (regs->num_regs, regoff_t);
- if (regs->start == NULL || regs->end == NULL)
- {
- FREE_VARIABLES ();
- return -2;
- }
- bufp->regs_allocated = REGS_REALLOCATE;
- }
- else if (bufp->regs_allocated == REGS_REALLOCATE)
- { /* Yes. If we need more elements than were already
- allocated, reallocate them. If we need fewer, just
- leave it alone. */
- if (regs->num_regs < num_regs + 1)
- {
- regs->num_regs = num_regs + 1;
- RETALLOC (regs->start, regs->num_regs, regoff_t);
- RETALLOC (regs->end, regs->num_regs, regoff_t);
- if (regs->start == NULL || regs->end == NULL)
- {
- FREE_VARIABLES ();
- return -2;
- }
- }
- }
- else
- {
- /* These braces fend off a "empty body in an else-statement"
- warning under GCC when assert expands to nothing. */
- assert (bufp->regs_allocated == REGS_FIXED);
- }
-
- /* Convert the pointer data in `regstart' and `regend' to
- indices. Register zero has to be set differently,
- since we haven't kept track of any info for it. */
- if (regs->num_regs > 0)
- {
- regs->start[0] = pos;
- regs->end[0] = (MATCHING_IN_FIRST_STRING
- ? ((regoff_t) (d - string1))
- : ((regoff_t) (d - string2 + size1)));
- }
-
- /* Go through the first `min (num_regs, regs->num_regs)'
- registers, since that is all we initialized. */
- for (mcnt = 1; mcnt < MIN (num_regs, regs->num_regs); mcnt++)
- {
- if (REG_UNSET (regstart[mcnt]) || REG_UNSET (regend[mcnt]))
- regs->start[mcnt] = regs->end[mcnt] = -1;
- else
- {
- regs->start[mcnt]
- = (regoff_t) POINTER_TO_OFFSET (regstart[mcnt]);
- regs->end[mcnt]
- = (regoff_t) POINTER_TO_OFFSET (regend[mcnt]);
- }
- }
-
- /* If the regs structure we return has more elements than
- were in the pattern, set the extra elements to -1. If
- we (re)allocated the registers, this is the case,
- because we always allocate enough to have at least one
- -1 at the end. */
- for (mcnt = num_regs; mcnt < regs->num_regs; mcnt++)
- regs->start[mcnt] = regs->end[mcnt] = -1;
- } /* regs && !bufp->no_sub */
-
- DEBUG_PRINT4 ("%u failure points pushed, %u popped (%u remain).\n",
- nfailure_points_pushed, nfailure_points_popped,
- nfailure_points_pushed - nfailure_points_popped);
- DEBUG_PRINT2 ("%u registers pushed.\n", num_regs_pushed);
-
- mcnt = d - pos - (MATCHING_IN_FIRST_STRING
- ? string1
- : string2 - size1);
-
- DEBUG_PRINT2 ("Returning %d from re_match_2.\n", mcnt);
-
- FREE_VARIABLES ();
- return mcnt;
- }
-
- /* Otherwise match next pattern command. */
- switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++))
- {
- /* Ignore these. Used to ignore the n of succeed_n's which
- currently have n == 0. */
- case no_op:
- DEBUG_PRINT1 ("EXECUTING no_op.\n");
- break;
-
- case succeed:
- DEBUG_PRINT1 ("EXECUTING succeed.\n");
- goto succeed_label;
-
- /* Match the next n pattern characters exactly. The following
- byte in the pattern defines n, and the n bytes after that
- are the characters to match. */
- case exactn:
- mcnt = *p++;
- DEBUG_PRINT2 ("EXECUTING exactn %d.\n", mcnt);
-
- /* This is written out as an if-else so we don't waste time
- testing `translate' inside the loop. */
- if (translate)
- {
- do
- {
- PREFETCH ();
- if ((unsigned char) translate[(unsigned char) *d++]
- != (unsigned char) *p++)
- goto fail;
- }
- while (--mcnt);
- }
- else
- {
- do
- {
- PREFETCH ();
- if (*d++ != (char) *p++) goto fail;
- }
- while (--mcnt);
- }
- SET_REGS_MATCHED ();
- break;
-
-
- /* Match any character except possibly a newline or a null. */
- case anychar:
- DEBUG_PRINT1 ("EXECUTING anychar.\n");
-
- PREFETCH ();
-
- if ((!(bufp->syntax & RE_DOT_NEWLINE) && TRANSLATE (*d) == '\n')
- || (bufp->syntax & RE_DOT_NOT_NULL && TRANSLATE (*d) == '\000'))
- goto fail;
-
- SET_REGS_MATCHED ();
- DEBUG_PRINT2 (" Matched `%d'.\n", *d);
- d++;
- break;
-
-
- case charset:
- case charset_not:
- {
- register unsigned char c;
- boolean not = (re_opcode_t) *(p - 1) == charset_not;
-
- DEBUG_PRINT2 ("EXECUTING charset%s.\n", not ? "_not" : "");
-
- PREFETCH ();
- c = TRANSLATE (*d); /* The character to match. */
-
- /* Cast to `unsigned' instead of `unsigned char' in case the
- bit list is a full 32 bytes long. */
- if (c < (unsigned) (*p * BYTEWIDTH)
- && p[1 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
- not = !not;
-
- p += 1 + *p;
-
- if (!not) goto fail;
-
- SET_REGS_MATCHED ();
- d++;
- break;
- }
-
-
- /* The beginning of a group is represented by start_memory.
- The arguments are the register number in the next byte, and the
- number of groups inner to this one in the next. The text
- matched within the group is recorded (in the internal
- registers data structure) under the register number. */
- case start_memory:
- DEBUG_PRINT3 ("EXECUTING start_memory %d (%d):\n", *p, p[1]);
-
- /* Find out if this group can match the empty string. */
- p1 = p; /* To send to group_match_null_string_p. */
-
- if (REG_MATCH_NULL_STRING_P (reg_info[*p]) == MATCH_NULL_UNSET_VALUE)
- REG_MATCH_NULL_STRING_P (reg_info[*p])
- = group_match_null_string_p (&p1, pend, reg_info);
-
- /* Save the position in the string where we were the last time
- we were at this open-group operator in case the group is
- operated upon by a repetition operator, e.g., with `(a*)*b'
- against `ab'; then we want to ignore where we are now in
- the string in case this attempt to match fails. */
- old_regstart[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p])
- ? REG_UNSET (regstart[*p]) ? d : regstart[*p]
- : regstart[*p];
- DEBUG_PRINT2 (" old_regstart: %d\n",
- POINTER_TO_OFFSET (old_regstart[*p]));
-
- regstart[*p] = d;
- DEBUG_PRINT2 (" regstart: %d\n", POINTER_TO_OFFSET (regstart[*p]));
-
- IS_ACTIVE (reg_info[*p]) = 1;
- MATCHED_SOMETHING (reg_info[*p]) = 0;
-
- /* Clear this whenever we change the register activity status. */
- set_regs_matched_done = 0;
-
- /* This is the new highest active register. */
- highest_active_reg = *p;
-
- /* If nothing was active before, this is the new lowest active
- register. */
- if (lowest_active_reg == NO_LOWEST_ACTIVE_REG)
- lowest_active_reg = *p;
-
- /* Move past the register number and inner group count. */
- p += 2;
- just_past_start_mem = p;
-
- break;
-
-
- /* The stop_memory opcode represents the end of a group. Its
- arguments are the same as start_memory's: the register
- number, and the number of inner groups. */
- case stop_memory:
- DEBUG_PRINT3 ("EXECUTING stop_memory %d (%d):\n", *p, p[1]);
-
- /* We need to save the string position the last time we were at
- this close-group operator in case the group is operated
- upon by a repetition operator, e.g., with `((a*)*(b*)*)*'
- against `aba'; then we want to ignore where we are now in
- the string in case this attempt to match fails. */
- old_regend[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p])
- ? REG_UNSET (regend[*p]) ? d : regend[*p]
- : regend[*p];
- DEBUG_PRINT2 (" old_regend: %d\n",
- POINTER_TO_OFFSET (old_regend[*p]));
-
- regend[*p] = d;
- DEBUG_PRINT2 (" regend: %d\n", POINTER_TO_OFFSET (regend[*p]));
-
- /* This register isn't active anymore. */
- IS_ACTIVE (reg_info[*p]) = 0;
-
- /* Clear this whenever we change the register activity status. */
- set_regs_matched_done = 0;
-
- /* If this was the only register active, nothing is active
- anymore. */
- if (lowest_active_reg == highest_active_reg)
- {
- lowest_active_reg = NO_LOWEST_ACTIVE_REG;
- highest_active_reg = NO_HIGHEST_ACTIVE_REG;
- }
- else
- { /* We must scan for the new highest active register, since
- it isn't necessarily one less than now: consider
- (a(b)c(d(e)f)g). When group 3 ends, after the f), the
- new highest active register is 1. */
- unsigned char r = *p - 1;
- while (r > 0 && !IS_ACTIVE (reg_info[r]))
- r--;
-
- /* If we end up at register zero, that means that we saved
- the registers as the result of an `on_failure_jump', not
- a `start_memory', and we jumped to past the innermost
- `stop_memory'. For example, in ((.)*) we save
- registers 1 and 2 as a result of the *, but when we pop
- back to the second ), we are at the stop_memory 1.
- Thus, nothing is active. */
- if (r == 0)
- {
- lowest_active_reg = NO_LOWEST_ACTIVE_REG;
- highest_active_reg = NO_HIGHEST_ACTIVE_REG;
- }
- else
- highest_active_reg = r;
- }
-
- /* If just failed to match something this time around with a
- group that's operated on by a repetition operator, try to
- force exit from the ``loop'', and restore the register
- information for this group that we had before trying this
- last match. */
- if ((!MATCHED_SOMETHING (reg_info[*p])
- || just_past_start_mem == p - 1)
- && (p + 2) < pend)
- {
- boolean is_a_jump_n = false;
-
- p1 = p + 2;
- mcnt = 0;
- switch ((re_opcode_t) *p1++)
- {
- case jump_n:
- is_a_jump_n = true;
- case pop_failure_jump:
- case maybe_pop_jump:
- case jump:
- case dummy_failure_jump:
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
- if (is_a_jump_n)
- p1 += 2;
- break;
-
- default:
- /* do nothing */ ;
- }
- p1 += mcnt;
-
- /* If the next operation is a jump backwards in the pattern
- to an on_failure_jump right before the start_memory
- corresponding to this stop_memory, exit from the loop
- by forcing a failure after pushing on the stack the
- on_failure_jump's jump in the pattern, and d. */
- if (mcnt < 0 && (re_opcode_t) *p1 == on_failure_jump
- && (re_opcode_t) p1[3] == start_memory && p1[4] == *p)
- {
- /* If this group ever matched anything, then restore
- what its registers were before trying this last
- failed match, e.g., with `(a*)*b' against `ab' for
- regstart[1], and, e.g., with `((a*)*(b*)*)*'
- against `aba' for regend[3].
-
- Also restore the registers for inner groups for,
- e.g., `((a*)(b*))*' against `aba' (register 3 would
- otherwise get trashed). */
-
- if (EVER_MATCHED_SOMETHING (reg_info[*p]))
- {
- unsigned r;
-
- EVER_MATCHED_SOMETHING (reg_info[*p]) = 0;
-
- /* Restore this and inner groups' (if any) registers. */
- for (r = *p; r < *p + *(p + 1); r++)
- {
- regstart[r] = old_regstart[r];
-
- /* xx why this test? */
- if (old_regend[r] >= regstart[r])
- regend[r] = old_regend[r];
- }
- }
- p1++;
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
- PUSH_FAILURE_POINT (p1 + mcnt, d, -2);
-
- goto fail;
- }
- }
-
- /* Move past the register number and the inner group count. */
- p += 2;
- break;
-
-
- /* \<digit> has been turned into a `duplicate' command which is
- followed by the numeric value of <digit> as the register number. */
- case duplicate:
- {
- register const char *d2, *dend2;
- int regno = *p++; /* Get which register to match against. */
- DEBUG_PRINT2 ("EXECUTING duplicate %d.\n", regno);
-
- /* Can't back reference a group which we've never matched. */
- if (REG_UNSET (regstart[regno]) || REG_UNSET (regend[regno]))
- goto fail;
-
- /* Where in input to try to start matching. */
- d2 = regstart[regno];
-
- /* Where to stop matching; if both the place to start and
- the place to stop matching are in the same string, then
- set to the place to stop, otherwise, for now have to use
- the end of the first string. */
-
- dend2 = ((FIRST_STRING_P (regstart[regno])
- == FIRST_STRING_P (regend[regno]))
- ? regend[regno] : end_match_1);
- for (;;)
- {
- /* If necessary, advance to next segment in register
- contents. */
- while (d2 == dend2)
- {
- if (dend2 == end_match_2) break;
- if (dend2 == regend[regno]) break;
-
- /* End of string1 => advance to string2. */
- d2 = string2;
- dend2 = regend[regno];
- }
- /* At end of register contents => success */
- if (d2 == dend2) break;
-
- /* If necessary, advance to next segment in data. */
- PREFETCH ();
-
- /* How many characters left in this segment to match. */
- mcnt = dend - d;
-
- /* Want how many consecutive characters we can match in
- one shot, so, if necessary, adjust the count. */
- if (mcnt > dend2 - d2)
- mcnt = dend2 - d2;
-
- /* Compare that many; failure if mismatch, else move
- past them. */
- if (translate
- ? bcmp_translate (d, d2, mcnt, translate)
- : bcmp (d, d2, mcnt))
- goto fail;
- d += mcnt, d2 += mcnt;
-
- /* Do this because we've match some characters. */
- SET_REGS_MATCHED ();
- }
- }
- break;
-
-
- /* begline matches the empty string at the beginning of the string
- (unless `not_bol' is set in `bufp'), and, if
- `newline_anchor' is set, after newlines. */
- case begline:
- DEBUG_PRINT1 ("EXECUTING begline.\n");
-
- if (AT_STRINGS_BEG (d))
- {
- if (!bufp->not_bol) break;
- }
- else if (d[-1] == '\n' && bufp->newline_anchor)
- {
- break;
- }
- /* In all other cases, we fail. */
- goto fail;
-
-
- /* endline is the dual of begline. */
- case endline:
- DEBUG_PRINT1 ("EXECUTING endline.\n");
-
- if (AT_STRINGS_END (d))
- {
- if (!bufp->not_eol) break;
- }
-
- /* We have to ``prefetch'' the next character. */
- else if ((d == end1 ? *string2 : *d) == '\n'
- && bufp->newline_anchor)
- {
- break;
- }
- goto fail;
-
-
- /* Match at the very beginning of the data. */
- case begbuf:
- DEBUG_PRINT1 ("EXECUTING begbuf.\n");
- if (AT_STRINGS_BEG (d))
- break;
- goto fail;
-
-
- /* Match at the very end of the data. */
- case endbuf:
- DEBUG_PRINT1 ("EXECUTING endbuf.\n");
- if (AT_STRINGS_END (d))
- break;
- goto fail;
-
-
- /* on_failure_keep_string_jump is used to optimize `.*\n'. It
- pushes NULL as the value for the string on the stack. Then
- `pop_failure_point' will keep the current value for the
- string, instead of restoring it. To see why, consider
- matching `foo\nbar' against `.*\n'. The .* matches the foo;
- then the . fails against the \n. But the next thing we want
- to do is match the \n against the \n; if we restored the
- string value, we would be back at the foo.
-
- Because this is used only in specific cases, we don't need to
- check all the things that `on_failure_jump' does, to make
- sure the right things get saved on the stack. Hence we don't
- share its code. The only reason to push anything on the
- stack at all is that otherwise we would have to change
- `anychar's code to do something besides goto fail in this
- case; that seems worse than this. */
- case on_failure_keep_string_jump:
- DEBUG_PRINT1 ("EXECUTING on_failure_keep_string_jump");
-
- EXTRACT_NUMBER_AND_INCR (mcnt, p);
- DEBUG_PRINT3 (" %d (to 0x%x):\n", mcnt, p + mcnt);
-
- PUSH_FAILURE_POINT (p + mcnt, NULL, -2);
- break;
-
-
- /* Uses of on_failure_jump:
-
- Each alternative starts with an on_failure_jump that points
- to the beginning of the next alternative. Each alternative
- except the last ends with a jump that in effect jumps past
- the rest of the alternatives. (They really jump to the
- ending jump of the following alternative, because tensioning
- these jumps is a hassle.)
-
- Repeats start with an on_failure_jump that points past both
- the repetition text and either the following jump or
- pop_failure_jump back to this on_failure_jump. */
- case on_failure_jump:
- on_failure:
- DEBUG_PRINT1 ("EXECUTING on_failure_jump");
-
- EXTRACT_NUMBER_AND_INCR (mcnt, p);
- DEBUG_PRINT3 (" %d (to 0x%x)", mcnt, p + mcnt);
-
- /* If this on_failure_jump comes right before a group (i.e.,
- the original * applied to a group), save the information
- for that group and all inner ones, so that if we fail back
- to this point, the group's information will be correct.
- For example, in \(a*\)*\1, we need the preceding group,
- and in \(zz\(a*\)b*\)\2, we need the inner group. */
-
- /* We can't use `p' to check ahead because we push
- a failure point to `p + mcnt' after we do this. */
- p1 = p;
-
- /* We need to skip no_op's before we look for the
- start_memory in case this on_failure_jump is happening as
- the result of a completed succeed_n, as in \(a\)\{1,3\}b\1
- against aba. */
- while (p1 < pend && (re_opcode_t) *p1 == no_op)
- p1++;
-
- if (p1 < pend && (re_opcode_t) *p1 == start_memory)
- {
- /* We have a new highest active register now. This will
- get reset at the start_memory we are about to get to,
- but we will have saved all the registers relevant to
- this repetition op, as described above. */
- highest_active_reg = *(p1 + 1) + *(p1 + 2);
- if (lowest_active_reg == NO_LOWEST_ACTIVE_REG)
- lowest_active_reg = *(p1 + 1);
- }
-
- DEBUG_PRINT1 (":\n");
- PUSH_FAILURE_POINT (p + mcnt, d, -2);
- break;
-
-
- /* A smart repeat ends with `maybe_pop_jump'.
- We change it to either `pop_failure_jump' or `jump'. */
- case maybe_pop_jump:
- EXTRACT_NUMBER_AND_INCR (mcnt, p);
- DEBUG_PRINT2 ("EXECUTING maybe_pop_jump %d.\n", mcnt);
- {
- register unsigned char *p2 = p;
-
- /* Compare the beginning of the repeat with what in the
- pattern follows its end. If we can establish that there
- is nothing that they would both match, i.e., that we
- would have to backtrack because of (as in, e.g., `a*a')
- then we can change to pop_failure_jump, because we'll
- never have to backtrack.
-
- This is not true in the case of alternatives: in
- `(a|ab)*' we do need to backtrack to the `ab' alternative
- (e.g., if the string was `ab'). But instead of trying to
- detect that here, the alternative has put on a dummy
- failure point which is what we will end up popping. */
-
- /* Skip over open/close-group commands.
- If what follows this loop is a ...+ construct,
- look at what begins its body, since we will have to
- match at least one of that. */
- while (1)
- {
- if (p2 + 2 < pend
- && ((re_opcode_t) *p2 == stop_memory
- || (re_opcode_t) *p2 == start_memory))
- p2 += 3;
- else if (p2 + 6 < pend
- && (re_opcode_t) *p2 == dummy_failure_jump)
- p2 += 6;
- else
- break;
- }
-
- p1 = p + mcnt;
- /* p1[0] ... p1[2] are the `on_failure_jump' corresponding
- to the `maybe_finalize_jump' of this case. Examine what
- follows. */
-
- /* If we're at the end of the pattern, we can change. */
- if (p2 == pend)
- {
- /* Consider what happens when matching ":\(.*\)"
- against ":/". I don't really understand this code
- yet. */
- p[-3] = (unsigned char) pop_failure_jump;
- DEBUG_PRINT1
- (" End of pattern: change to `pop_failure_jump'.\n");
- }
-
- else if ((re_opcode_t) *p2 == exactn
- || (bufp->newline_anchor && (re_opcode_t) *p2 == endline))
- {
- register unsigned char c
- = *p2 == (unsigned char) endline ? '\n' : p2[2];
-
- if ((re_opcode_t) p1[3] == exactn && p1[5] != c)
- {
- p[-3] = (unsigned char) pop_failure_jump;
- DEBUG_PRINT3 (" %c != %c => pop_failure_jump.\n",
- c, p1[5]);
- }
-
- else if ((re_opcode_t) p1[3] == charset
- || (re_opcode_t) p1[3] == charset_not)
- {
- int not = (re_opcode_t) p1[3] == charset_not;
-
- if (c < (unsigned char) (p1[4] * BYTEWIDTH)
- && p1[5 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
- not = !not;
-
- /* `not' is equal to 1 if c would match, which means
- that we can't change to pop_failure_jump. */
- if (!not)
- {
- p[-3] = (unsigned char) pop_failure_jump;
- DEBUG_PRINT1 (" No match => pop_failure_jump.\n");
- }
- }
- }
- else if ((re_opcode_t) *p2 == charset)
- {
-#ifdef DEBUG
- register unsigned char c
- = *p2 == (unsigned char) endline ? '\n' : p2[2];
-#endif
-
- if ((re_opcode_t) p1[3] == exactn
- && ! ((int) p2[1] * BYTEWIDTH > (int) p1[5]
- && (p2[2 + p1[5] / BYTEWIDTH]
- & (1 << (p1[5] % BYTEWIDTH)))))
- {
- p[-3] = (unsigned char) pop_failure_jump;
- DEBUG_PRINT3 (" %c != %c => pop_failure_jump.\n",
- c, p1[5]);
- }
-
- else if ((re_opcode_t) p1[3] == charset_not)
- {
- int idx;
- /* We win if the charset_not inside the loop
- lists every character listed in the charset after. */
- for (idx = 0; idx < (int) p2[1]; idx++)
- if (! (p2[2 + idx] == 0
- || (idx < (int) p1[4]
- && ((p2[2 + idx] & ~ p1[5 + idx]) == 0))))
- break;
-
- if (idx == p2[1])
- {
- p[-3] = (unsigned char) pop_failure_jump;
- DEBUG_PRINT1 (" No match => pop_failure_jump.\n");
- }
- }
- else if ((re_opcode_t) p1[3] == charset)
- {
- int idx;
- /* We win if the charset inside the loop
- has no overlap with the one after the loop. */
- for (idx = 0;
- idx < (int) p2[1] && idx < (int) p1[4];
- idx++)
- if ((p2[2 + idx] & p1[5 + idx]) != 0)
- break;
-
- if (idx == p2[1] || idx == p1[4])
- {
- p[-3] = (unsigned char) pop_failure_jump;
- DEBUG_PRINT1 (" No match => pop_failure_jump.\n");
- }
- }
- }
- }
- p -= 2; /* Point at relative address again. */
- if ((re_opcode_t) p[-1] != pop_failure_jump)
- {
- p[-1] = (unsigned char) jump;
- DEBUG_PRINT1 (" Match => jump.\n");
- goto unconditional_jump;
- }
- /* Note fall through. */
-
-
- /* The end of a simple repeat has a pop_failure_jump back to
- its matching on_failure_jump, where the latter will push a
- failure point. The pop_failure_jump takes off failure
- points put on by this pop_failure_jump's matching
- on_failure_jump; we got through the pattern to here from the
- matching on_failure_jump, so didn't fail. */
- case pop_failure_jump:
- {
- /* We need to pass separate storage for the lowest and
- highest registers, even though we don't care about the
- actual values. Otherwise, we will restore only one
- register from the stack, since lowest will == highest in
- `pop_failure_point'. */
- unsigned dummy_low_reg, dummy_high_reg;
- unsigned char *pdummy;
- const char *sdummy;
-
- DEBUG_PRINT1 ("EXECUTING pop_failure_jump.\n");
- POP_FAILURE_POINT (sdummy, pdummy,
- dummy_low_reg, dummy_high_reg,
- reg_dummy, reg_dummy, reg_info_dummy);
- }
- /* Note fall through. */
-
-
- /* Unconditionally jump (without popping any failure points). */
- case jump:
- unconditional_jump:
- EXTRACT_NUMBER_AND_INCR (mcnt, p); /* Get the amount to jump. */
- DEBUG_PRINT2 ("EXECUTING jump %d ", mcnt);
- p += mcnt; /* Do the jump. */
- DEBUG_PRINT2 ("(to 0x%x).\n", p);
- break;
-
-
- /* We need this opcode so we can detect where alternatives end
- in `group_match_null_string_p' et al. */
- case jump_past_alt:
- DEBUG_PRINT1 ("EXECUTING jump_past_alt.\n");
- goto unconditional_jump;
-
-
- /* Normally, the on_failure_jump pushes a failure point, which
- then gets popped at pop_failure_jump. We will end up at
- pop_failure_jump, also, and with a pattern of, say, `a+', we
- are skipping over the on_failure_jump, so we have to push
- something meaningless for pop_failure_jump to pop. */
- case dummy_failure_jump:
- DEBUG_PRINT1 ("EXECUTING dummy_failure_jump.\n");
- /* It doesn't matter what we push for the string here. What
- the code at `fail' tests is the value for the pattern. */
- PUSH_FAILURE_POINT (0, 0, -2);
- goto unconditional_jump;
-
-
- /* At the end of an alternative, we need to push a dummy failure
- point in case we are followed by a `pop_failure_jump', because
- we don't want the failure point for the alternative to be
- popped. For example, matching `(a|ab)*' against `aab'
- requires that we match the `ab' alternative. */
- case push_dummy_failure:
- DEBUG_PRINT1 ("EXECUTING push_dummy_failure.\n");
- /* See comments just above at `dummy_failure_jump' about the
- two zeroes. */
- PUSH_FAILURE_POINT (0, 0, -2);
- break;
-
- /* Have to succeed matching what follows at least n times.
- After that, handle like `on_failure_jump'. */
- case succeed_n:
- EXTRACT_NUMBER (mcnt, p + 2);
- DEBUG_PRINT2 ("EXECUTING succeed_n %d.\n", mcnt);
-
- assert (mcnt >= 0);
- /* Originally, this is how many times we HAVE to succeed. */
- if (mcnt > 0)
- {
- mcnt--;
- p += 2;
- STORE_NUMBER_AND_INCR (p, mcnt);
- DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p, mcnt);
- }
- else if (mcnt == 0)
- {
- DEBUG_PRINT2 (" Setting two bytes from 0x%x to no_op.\n", p+2);
- p[2] = (unsigned char) no_op;
- p[3] = (unsigned char) no_op;
- goto on_failure;
- }
- break;
-
- case jump_n:
- EXTRACT_NUMBER (mcnt, p + 2);
- DEBUG_PRINT2 ("EXECUTING jump_n %d.\n", mcnt);
-
- /* Originally, this is how many times we CAN jump. */
- if (mcnt)
- {
- mcnt--;
- STORE_NUMBER (p + 2, mcnt);
- goto unconditional_jump;
- }
- /* If don't have to jump any more, skip over the rest of command. */
- else
- p += 4;
- break;
-
- case set_number_at:
- {
- DEBUG_PRINT1 ("EXECUTING set_number_at.\n");
-
- EXTRACT_NUMBER_AND_INCR (mcnt, p);
- p1 = p + mcnt;
- EXTRACT_NUMBER_AND_INCR (mcnt, p);
- DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p1, mcnt);
- STORE_NUMBER (p1, mcnt);
- break;
- }
-
-#if 0
- /* The DEC Alpha C compiler 3.x generates incorrect code for the
- test WORDCHAR_P (d - 1) != WORDCHAR_P (d) in the expansion of
- AT_WORD_BOUNDARY, so this code is disabled. Expanding the
- macro and introducing temporary variables works around the bug. */
-
- case wordbound:
- DEBUG_PRINT1 ("EXECUTING wordbound.\n");
- if (AT_WORD_BOUNDARY (d))
- break;
- goto fail;
-
- case notwordbound:
- DEBUG_PRINT1 ("EXECUTING notwordbound.\n");
- if (AT_WORD_BOUNDARY (d))
- goto fail;
- break;
-#else
- case wordbound:
- {
- boolean prevchar, thischar;
-
- DEBUG_PRINT1 ("EXECUTING wordbound.\n");
- if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d))
- break;
-
- prevchar = WORDCHAR_P (d - 1);
- thischar = WORDCHAR_P (d);
- if (prevchar != thischar)
- break;
- goto fail;
- }
-
- case notwordbound:
- {
- boolean prevchar, thischar;
-
- DEBUG_PRINT1 ("EXECUTING notwordbound.\n");
- if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d))
- goto fail;
-
- prevchar = WORDCHAR_P (d - 1);
- thischar = WORDCHAR_P (d);
- if (prevchar != thischar)
- goto fail;
- break;
- }
-#endif
-
- case wordbeg:
- DEBUG_PRINT1 ("EXECUTING wordbeg.\n");
- if (WORDCHAR_P (d) && (AT_STRINGS_BEG (d) || !WORDCHAR_P (d - 1)))
- break;
- goto fail;
-
- case wordend:
- DEBUG_PRINT1 ("EXECUTING wordend.\n");
- if (!AT_STRINGS_BEG (d) && WORDCHAR_P (d - 1)
- && (!WORDCHAR_P (d) || AT_STRINGS_END (d)))
- break;
- goto fail;
-
-#ifdef emacs
- case before_dot:
- DEBUG_PRINT1 ("EXECUTING before_dot.\n");
- if (PTR_CHAR_POS ((unsigned char *) d) >= PT)
- goto fail;
- break;
-
- case at_dot:
- DEBUG_PRINT1 ("EXECUTING at_dot.\n");
- if (PTR_CHAR_POS ((unsigned char *) d) != PT)
- goto fail;
- break;
-
- case after_dot:
- DEBUG_PRINT1 ("EXECUTING after_dot.\n");
- if (PTR_CHAR_POS ((unsigned char *) d) <= PT)
- goto fail;
- break;
-
- case syntaxspec:
- DEBUG_PRINT2 ("EXECUTING syntaxspec %d.\n", mcnt);
- mcnt = *p++;
- goto matchsyntax;
-
- case wordchar:
- DEBUG_PRINT1 ("EXECUTING Emacs wordchar.\n");
- mcnt = (int) Sword;
- matchsyntax:
- PREFETCH ();
- /* Can't use *d++ here; SYNTAX may be an unsafe macro. */
- d++;
- if (SYNTAX (d[-1]) != (enum syntaxcode) mcnt)
- goto fail;
- SET_REGS_MATCHED ();
- break;
-
- case notsyntaxspec:
- DEBUG_PRINT2 ("EXECUTING notsyntaxspec %d.\n", mcnt);
- mcnt = *p++;
- goto matchnotsyntax;
-
- case notwordchar:
- DEBUG_PRINT1 ("EXECUTING Emacs notwordchar.\n");
- mcnt = (int) Sword;
- matchnotsyntax:
- PREFETCH ();
- /* Can't use *d++ here; SYNTAX may be an unsafe macro. */
- d++;
- if (SYNTAX (d[-1]) == (enum syntaxcode) mcnt)
- goto fail;
- SET_REGS_MATCHED ();
- break;
-
-#else /* not emacs */
- case wordchar:
- DEBUG_PRINT1 ("EXECUTING non-Emacs wordchar.\n");
- PREFETCH ();
- if (!WORDCHAR_P (d))
- goto fail;
- SET_REGS_MATCHED ();
- d++;
- break;
-
- case notwordchar:
- DEBUG_PRINT1 ("EXECUTING non-Emacs notwordchar.\n");
- PREFETCH ();
- if (WORDCHAR_P (d))
- goto fail;
- SET_REGS_MATCHED ();
- d++;
- break;
-#endif /* not emacs */
-
- default:
- abort ();
- }
- continue; /* Successfully executed one pattern command; keep going. */
-
-
- /* We goto here if a matching operation fails. */
- fail:
- if (!FAIL_STACK_EMPTY ())
- { /* A restart point is known. Restore to that state. */
- DEBUG_PRINT1 ("\nFAIL:\n");
- POP_FAILURE_POINT (d, p,
- lowest_active_reg, highest_active_reg,
- regstart, regend, reg_info);
-
- /* If this failure point is a dummy, try the next one. */
- if (!p)
- goto fail;
-
- /* If we failed to the end of the pattern, don't examine *p. */
- assert (p <= pend);
- if (p < pend)
- {
- boolean is_a_jump_n = false;
-
- /* If failed to a backwards jump that's part of a repetition
- loop, need to pop this failure point and use the next one. */
- switch ((re_opcode_t) *p)
- {
- case jump_n:
- is_a_jump_n = true;
- case maybe_pop_jump:
- case pop_failure_jump:
- case jump:
- p1 = p + 1;
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
- p1 += mcnt;
-
- if ((is_a_jump_n && (re_opcode_t) *p1 == succeed_n)
- || (!is_a_jump_n
- && (re_opcode_t) *p1 == on_failure_jump))
- goto fail;
- break;
- default:
- /* do nothing */ ;
- }
- }
-
- if (d >= string1 && d <= end1)
- dend = end_match_1;
- }
- else
- break; /* Matching at this starting point really fails. */
- } /* for (;;) */
-
- if (best_regs_set)
- goto restore_best_regs;
-
- FREE_VARIABLES ();
-
- return -1; /* Failure to match. */
-} /* re_match_2 */
-
-/* Subroutine definitions for re_match_2. */
-
-
-/* We are passed P pointing to a register number after a start_memory.
-
- Return true if the pattern up to the corresponding stop_memory can
- match the empty string, and false otherwise.
-
- If we find the matching stop_memory, sets P to point to one past its number.
- Otherwise, sets P to an undefined byte less than or equal to END.
-
- We don't handle duplicates properly (yet). */
-
-static boolean
-group_match_null_string_p (p, end, reg_info)
- unsigned char **p, *end;
- register_info_type *reg_info;
-{
- int mcnt;
- /* Point to after the args to the start_memory. */
- unsigned char *p1 = *p + 2;
-
- while (p1 < end)
- {
- /* Skip over opcodes that can match nothing, and return true or
- false, as appropriate, when we get to one that can't, or to the
- matching stop_memory. */
-
- switch ((re_opcode_t) *p1)
- {
- /* Could be either a loop or a series of alternatives. */
- case on_failure_jump:
- p1++;
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
-
- /* If the next operation is not a jump backwards in the
- pattern. */
-
- if (mcnt >= 0)
- {
- /* Go through the on_failure_jumps of the alternatives,
- seeing if any of the alternatives cannot match nothing.
- The last alternative starts with only a jump,
- whereas the rest start with on_failure_jump and end
- with a jump, e.g., here is the pattern for `a|b|c':
-
- /on_failure_jump/0/6/exactn/1/a/jump_past_alt/0/6
- /on_failure_jump/0/6/exactn/1/b/jump_past_alt/0/3
- /exactn/1/c
-
- So, we have to first go through the first (n-1)
- alternatives and then deal with the last one separately. */
-
-
- /* Deal with the first (n-1) alternatives, which start
- with an on_failure_jump (see above) that jumps to right
- past a jump_past_alt. */
-
- while ((re_opcode_t) p1[mcnt-3] == jump_past_alt)
- {
- /* `mcnt' holds how many bytes long the alternative
- is, including the ending `jump_past_alt' and
- its number. */
-
- if (!alt_match_null_string_p (p1, p1 + mcnt - 3,
- reg_info))
- return false;
-
- /* Move to right after this alternative, including the
- jump_past_alt. */
- p1 += mcnt;
-
- /* Break if it's the beginning of an n-th alternative
- that doesn't begin with an on_failure_jump. */
- if ((re_opcode_t) *p1 != on_failure_jump)
- break;
-
- /* Still have to check that it's not an n-th
- alternative that starts with an on_failure_jump. */
- p1++;
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
- if ((re_opcode_t) p1[mcnt-3] != jump_past_alt)
- {
- /* Get to the beginning of the n-th alternative. */
- p1 -= 3;
- break;
- }
- }
-
- /* Deal with the last alternative: go back and get number
- of the `jump_past_alt' just before it. `mcnt' contains
- the length of the alternative. */
- EXTRACT_NUMBER (mcnt, p1 - 2);
-
- if (!alt_match_null_string_p (p1, p1 + mcnt, reg_info))
- return false;
-
- p1 += mcnt; /* Get past the n-th alternative. */
- } /* if mcnt > 0 */
- break;
-
-
- case stop_memory:
- assert (p1[1] == **p);
- *p = p1 + 2;
- return true;
-
-
- default:
- if (!common_op_match_null_string_p (&p1, end, reg_info))
- return false;
- }
- } /* while p1 < end */
-
- return false;
-} /* group_match_null_string_p */
-
-
-/* Similar to group_match_null_string_p, but doesn't deal with alternatives:
- It expects P to be the first byte of a single alternative and END one
- byte past the last. The alternative can contain groups. */
-
-static boolean
-alt_match_null_string_p (p, end, reg_info)
- unsigned char *p, *end;
- register_info_type *reg_info;
-{
- int mcnt;
- unsigned char *p1 = p;
-
- while (p1 < end)
- {
- /* Skip over opcodes that can match nothing, and break when we get
- to one that can't. */
-
- switch ((re_opcode_t) *p1)
- {
- /* It's a loop. */
- case on_failure_jump:
- p1++;
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
- p1 += mcnt;
- break;
-
- default:
- if (!common_op_match_null_string_p (&p1, end, reg_info))
- return false;
- }
- } /* while p1 < end */
-
- return true;
-} /* alt_match_null_string_p */
-
-
-/* Deals with the ops common to group_match_null_string_p and
- alt_match_null_string_p.
-
- Sets P to one after the op and its arguments, if any. */
-
-static boolean
-common_op_match_null_string_p (p, end, reg_info)
- unsigned char **p, *end;
- register_info_type *reg_info;
-{
- int mcnt;
- boolean ret;
- int reg_no;
- unsigned char *p1 = *p;
-
- switch ((re_opcode_t) *p1++)
- {
- case no_op:
- case begline:
- case endline:
- case begbuf:
- case endbuf:
- case wordbeg:
- case wordend:
- case wordbound:
- case notwordbound:
-#ifdef emacs
- case before_dot:
- case at_dot:
- case after_dot:
-#endif
- break;
-
- case start_memory:
- reg_no = *p1;
- assert (reg_no > 0 && reg_no <= MAX_REGNUM);
- ret = group_match_null_string_p (&p1, end, reg_info);
-
- /* Have to set this here in case we're checking a group which
- contains a group and a back reference to it. */
-
- if (REG_MATCH_NULL_STRING_P (reg_info[reg_no]) == MATCH_NULL_UNSET_VALUE)
- REG_MATCH_NULL_STRING_P (reg_info[reg_no]) = ret;
-
- if (!ret)
- return false;
- break;
-
- /* If this is an optimized succeed_n for zero times, make the jump. */
- case jump:
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
- if (mcnt >= 0)
- p1 += mcnt;
- else
- return false;
- break;
-
- case succeed_n:
- /* Get to the number of times to succeed. */
- p1 += 2;
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
-
- if (mcnt == 0)
- {
- p1 -= 4;
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
- p1 += mcnt;
- }
- else
- return false;
- break;
-
- case duplicate:
- if (!REG_MATCH_NULL_STRING_P (reg_info[*p1]))
- return false;
- break;
-
- case set_number_at:
- p1 += 4;
-
- default:
- /* All other opcodes mean we cannot match the empty string. */
- return false;
- }
-
- *p = p1;
- return true;
-} /* common_op_match_null_string_p */
-
-
-/* Return zero if TRANSLATE[S1] and TRANSLATE[S2] are identical for LEN
- bytes; nonzero otherwise. */
-
-static int
-bcmp_translate (s1, s2, len, translate)
- unsigned char *s1, *s2;
- register int len;
- RE_TRANSLATE_TYPE translate;
-{
- register unsigned char *p1 = s1, *p2 = s2;
- while (len)
- {
- if (translate[*p1++] != translate[*p2++]) return 1;
- len--;
- }
- return 0;
-}
-
-/* Entry points for GNU code. */
-
-/* re_compile_pattern is the GNU regular expression compiler: it
- compiles PATTERN (of length SIZE) and puts the result in BUFP.
- Returns 0 if the pattern was valid, otherwise an error string.
-
- Assumes the `allocated' (and perhaps `buffer') and `translate' fields
- are set in BUFP on entry.
-
- We call regex_compile to do the actual compilation. */
-
-const char *
-re_compile_pattern (pattern, length, bufp)
- const char *pattern;
- int length;
- struct re_pattern_buffer *bufp;
-{
- reg_errcode_t ret;
-
- /* GNU code is written to assume at least RE_NREGS registers will be set
- (and at least one extra will be -1). */
- bufp->regs_allocated = REGS_UNALLOCATED;
-
- /* And GNU code determines whether or not to get register information
- by passing null for the REGS argument to re_match, etc., not by
- setting no_sub. */
- bufp->no_sub = 0;
-
- /* Match anchors at newline. */
- bufp->newline_anchor = 1;
-
- ret = regex_compile (pattern, length, re_syntax_options, bufp);
-
- if (!ret)
- return NULL;
- return gettext (re_error_msgid[(int) ret]);
-}
-
-/* Entry points compatible with 4.2 BSD regex library. We don't define
- them unless specifically requested. */
-
-#if defined (_REGEX_RE_COMP) || defined (_LIBC)
-
-/* BSD has one and only one pattern buffer. */
-static struct re_pattern_buffer re_comp_buf;
-
-char *
-#ifdef _LIBC
-/* Make these definitions weak in libc, so POSIX programs can redefine
- these names if they don't use our functions, and still use
- regcomp/regexec below without link errors. */
-weak_function
-#endif
-re_comp (s)
- const char *s;
-{
- reg_errcode_t ret;
-
- if (!s)
- {
- if (!re_comp_buf.buffer)
- return gettext ("No previous regular expression");
- return 0;
- }
-
- if (!re_comp_buf.buffer)
- {
- re_comp_buf.buffer = (unsigned char *) malloc (200);
- if (re_comp_buf.buffer == NULL)
- return gettext (re_error_msgid[(int) REG_ESPACE]);
- re_comp_buf.allocated = 200;
-
- re_comp_buf.fastmap = (char *) malloc (1 << BYTEWIDTH);
- if (re_comp_buf.fastmap == NULL)
- return gettext (re_error_msgid[(int) REG_ESPACE]);
- }
-
- /* Since `re_exec' always passes NULL for the `regs' argument, we
- don't need to initialize the pattern buffer fields which affect it. */
-
- /* Match anchors at newlines. */
- re_comp_buf.newline_anchor = 1;
-
- ret = regex_compile (s, strlen (s), re_syntax_options, &re_comp_buf);
-
- if (!ret)
- return NULL;
-
- /* Yes, we're discarding `const' here if !HAVE_LIBINTL. */
- return (char *) gettext (re_error_msgid[(int) ret]);
-}
-
-
-int
-#ifdef _LIBC
-weak_function
-#endif
-re_exec (s)
- const char *s;
-{
- const int len = strlen (s);
- return
- 0 <= re_search (&re_comp_buf, s, len, 0, len, (struct re_registers *) 0);
-}
-#endif /* _REGEX_RE_COMP */
-
-/* POSIX.2 functions. Don't define these for Emacs. */
-
-#ifndef emacs
-
-/* regcomp takes a regular expression as a string and compiles it.
-
- PREG is a regex_t *. We do not expect any fields to be initialized,
- since POSIX says we shouldn't. Thus, we set
-
- `buffer' to the compiled pattern;
- `used' to the length of the compiled pattern;
- `syntax' to RE_SYNTAX_POSIX_EXTENDED if the
- REG_EXTENDED bit in CFLAGS is set; otherwise, to
- RE_SYNTAX_POSIX_BASIC;
- `newline_anchor' to REG_NEWLINE being set in CFLAGS;
- `fastmap' and `fastmap_accurate' to zero;
- `re_nsub' to the number of subexpressions in PATTERN.
-
- PATTERN is the address of the pattern string.
-
- CFLAGS is a series of bits which affect compilation.
-
- If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we
- use POSIX basic syntax.
-
- If REG_NEWLINE is set, then . and [^...] don't match newline.
- Also, regexec will try a match beginning after every newline.
-
- If REG_ICASE is set, then we considers upper- and lowercase
- versions of letters to be equivalent when matching.
-
- If REG_NOSUB is set, then when PREG is passed to regexec, that
- routine will report only success or failure, and nothing about the
- registers.
-
- It returns 0 if it succeeds, nonzero if it doesn't. (See regex.h for
- the return codes and their meanings.) */
-
-int
-regcomp (preg, pattern, cflags)
- regex_t *preg;
- const char *pattern;
- int cflags;
-{
- reg_errcode_t ret;
- unsigned syntax
- = (cflags & REG_EXTENDED) ?
- RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC;
-
- /* regex_compile will allocate the space for the compiled pattern. */
- preg->buffer = 0;
- preg->allocated = 0;
- preg->used = 0;
-
- /* Don't bother to use a fastmap when searching. This simplifies the
- REG_NEWLINE case: if we used a fastmap, we'd have to put all the
- characters after newlines into the fastmap. This way, we just try
- every character. */
- preg->fastmap = 0;
-
- if (cflags & REG_ICASE)
- {
- unsigned i;
-
- preg->translate
- = (RE_TRANSLATE_TYPE) malloc (CHAR_SET_SIZE
- * sizeof (*(RE_TRANSLATE_TYPE)0));
- if (preg->translate == NULL)
- return (int) REG_ESPACE;
-
- /* Map uppercase characters to corresponding lowercase ones. */
- for (i = 0; i < CHAR_SET_SIZE; i++)
- preg->translate[i] = ISUPPER (i) ? tolower (i) : i;
- }
- else
- preg->translate = NULL;
-
- /* If REG_NEWLINE is set, newlines are treated differently. */
- if (cflags & REG_NEWLINE)
- { /* REG_NEWLINE implies neither . nor [^...] match newline. */
- syntax &= ~RE_DOT_NEWLINE;
- syntax |= RE_HAT_LISTS_NOT_NEWLINE;
- /* It also changes the matching behavior. */
- preg->newline_anchor = 1;
- }
- else
- preg->newline_anchor = 0;
-
- preg->no_sub = !!(cflags & REG_NOSUB);
-
- /* POSIX says a null character in the pattern terminates it, so we
- can use strlen here in compiling the pattern. */
- ret = regex_compile (pattern, strlen (pattern), syntax, preg);
-
- /* POSIX doesn't distinguish between an unmatched open-group and an
- unmatched close-group: both are REG_EPAREN. */
- if (ret == REG_ERPAREN) ret = REG_EPAREN;
-
- return (int) ret;
-}
-
-
-/* regexec searches for a given pattern, specified by PREG, in the
- string STRING.
-
- If NMATCH is zero or REG_NOSUB was set in the cflags argument to
- `regcomp', we ignore PMATCH. Otherwise, we assume PMATCH has at
- least NMATCH elements, and we set them to the offsets of the
- corresponding matched substrings.
-
- EFLAGS specifies `execution flags' which affect matching: if
- REG_NOTBOL is set, then ^ does not match at the beginning of the
- string; if REG_NOTEOL is set, then $ does not match at the end.
-
- We return 0 if we find a match and REG_NOMATCH if not. */
-
-int
-regexec (preg, string, nmatch, pmatch, eflags)
- const regex_t *preg;
- const char *string;
- size_t nmatch;
- regmatch_t pmatch[];
- int eflags;
-{
- int ret;
- struct re_registers regs;
- regex_t private_preg;
- int len = strlen (string);
- boolean want_reg_info = !preg->no_sub && nmatch > 0;
-
- private_preg = *preg;
-
- private_preg.not_bol = !!(eflags & REG_NOTBOL);
- private_preg.not_eol = !!(eflags & REG_NOTEOL);
-
- /* The user has told us exactly how many registers to return
- information about, via `nmatch'. We have to pass that on to the
- matching routines. */
- private_preg.regs_allocated = REGS_FIXED;
-
- if (want_reg_info)
- {
- regs.num_regs = nmatch;
- regs.start = TALLOC (nmatch, regoff_t);
- regs.end = TALLOC (nmatch, regoff_t);
- if (regs.start == NULL || regs.end == NULL)
- return (int) REG_NOMATCH;
- }
-
- /* Perform the searching operation. */
- ret = re_search (&private_preg, string, len,
- /* start: */ 0, /* range: */ len,
- want_reg_info ? &regs : (struct re_registers *) 0);
-
- /* Copy the register information to the POSIX structure. */
- if (want_reg_info)
- {
- if (ret >= 0)
- {
- unsigned r;
-
- for (r = 0; r < nmatch; r++)
- {
- pmatch[r].rm_so = regs.start[r];
- pmatch[r].rm_eo = regs.end[r];
- }
- }
-
- /* If we needed the temporary register info, free the space now. */
- free (regs.start);
- free (regs.end);
- }
-
- /* We want zero return to mean success, unlike `re_search'. */
- return ret >= 0 ? (int) REG_NOERROR : (int) REG_NOMATCH;
-}
-
-
-/* Returns a message corresponding to an error code, ERRCODE, returned
- from either regcomp or regexec. We don't use PREG here. */
-
-size_t
-regerror (errcode, preg, errbuf, errbuf_size)
- int errcode;
- const regex_t *preg;
- char *errbuf;
- size_t errbuf_size;
-{
- const char *msg;
- size_t msg_size;
-
- if (errcode < 0
- || errcode >= (sizeof (re_error_msgid) / sizeof (re_error_msgid[0])))
- /* Only error codes returned by the rest of the code should be passed
- to this routine. If we are given anything else, or if other regex
- code generates an invalid error code, then the program has a bug.
- Dump core so we can fix it. */
- abort ();
-
- msg = gettext (re_error_msgid[errcode]);
-
- msg_size = strlen (msg) + 1; /* Includes the null. */
-
- if (errbuf_size != 0)
- {
- if (msg_size > errbuf_size)
- {
- strncpy (errbuf, msg, errbuf_size - 1);
- errbuf[errbuf_size - 1] = 0;
- }
- else
- strcpy (errbuf, msg);
- }
-
- return msg_size;
-}
-
-
-/* Free dynamically allocated space used by PREG. */
-
-void
-regfree (preg)
- regex_t *preg;
-{
- if (preg->buffer != NULL)
- free (preg->buffer);
- preg->buffer = NULL;
-
- preg->allocated = 0;
- preg->used = 0;
-
- if (preg->fastmap != NULL)
- free (preg->fastmap);
- preg->fastmap = NULL;
- preg->fastmap_accurate = 0;
-
- if (preg->translate != NULL)
- free (preg->translate);
- preg->translate = NULL;
-}
-
-#endif /* not emacs */
diff --git a/util/regex/regex.h b/util/regex/regex.h
deleted file mode 100644
index eb1b406..0000000
--- a/util/regex/regex.h
+++ /dev/null
@@ -1,495 +0,0 @@
-/* Definitions for data structures and routines for the regular
- expression library, version 0.12.
-
- Copyright (C) 1985, 89, 90, 91, 92, 93, 95 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#ifndef __REGEXP_LIBRARY_H__
-#define __REGEXP_LIBRARY_H__
-
-/* POSIX says that <sys/types.h> must be included (by the caller) before
- <regex.h>. */
-
-#if !defined (_POSIX_C_SOURCE) && !defined (_POSIX_SOURCE) && defined (VMS)
-/* VMS doesn't have `size_t' in <sys/types.h>, even though POSIX says it
- should be there. */
-#include <stddef.h>
-#endif
-
-
-/* The following bits are used to determine the regexp syntax we
- recognize. The set/not-set meanings are chosen so that Emacs syntax
- remains the value 0. The bits are given in alphabetical order, and
- the definitions shifted by one from the previous bit; thus, when we
- add or remove a bit, only one other definition need change. */
-typedef unsigned reg_syntax_t;
-
-/* If this bit is not set, then \ inside a bracket expression is literal.
- If set, then such a \ quotes the following character. */
-#define RE_BACKSLASH_ESCAPE_IN_LISTS (1)
-
-/* If this bit is not set, then + and ? are operators, and \+ and \? are
- literals.
- If set, then \+ and \? are operators and + and ? are literals. */
-#define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1)
-
-/* If this bit is set, then character classes are supported. They are:
- [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:],
- [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:].
- If not set, then character classes are not supported. */
-#define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1)
-
-/* If this bit is set, then ^ and $ are always anchors (outside bracket
- expressions, of course).
- If this bit is not set, then it depends:
- ^ is an anchor if it is at the beginning of a regular
- expression or after an open-group or an alternation operator;
- $ is an anchor if it is at the end of a regular expression, or
- before a close-group or an alternation operator.
-
- This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because
- POSIX draft 11.2 says that * etc. in leading positions is undefined.
- We already implemented a previous draft which made those constructs
- invalid, though, so we haven't changed the code back. */
-#define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1)
-
-/* If this bit is set, then special characters are always special
- regardless of where they are in the pattern.
- If this bit is not set, then special characters are special only in
- some contexts; otherwise they are ordinary. Specifically,
- * + ? and intervals are only special when not after the beginning,
- open-group, or alternation operator. */
-#define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1)
-
-/* If this bit is set, then *, +, ?, and { cannot be first in an re or
- immediately after an alternation or begin-group operator. */
-#define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1)
-
-/* If this bit is set, then . matches newline.
- If not set, then it doesn't. */
-#define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1)
-
-/* If this bit is set, then . doesn't match NUL.
- If not set, then it does. */
-#define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1)
-
-/* If this bit is set, nonmatching lists [^...] do not match newline.
- If not set, they do. */
-#define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1)
-
-/* If this bit is set, either \{...\} or {...} defines an
- interval, depending on RE_NO_BK_BRACES.
- If not set, \{, \}, {, and } are literals. */
-#define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1)
-
-/* If this bit is set, +, ? and | aren't recognized as operators.
- If not set, they are. */
-#define RE_LIMITED_OPS (RE_INTERVALS << 1)
-
-/* If this bit is set, newline is an alternation operator.
- If not set, newline is literal. */
-#define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1)
-
-/* If this bit is set, then `{...}' defines an interval, and \{ and \}
- are literals.
- If not set, then `\{...\}' defines an interval. */
-#define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1)
-
-/* If this bit is set, (...) defines a group, and \( and \) are literals.
- If not set, \(...\) defines a group, and ( and ) are literals. */
-#define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1)
-
-/* If this bit is set, then \<digit> matches <digit>.
- If not set, then \<digit> is a back-reference. */
-#define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1)
-
-/* If this bit is set, then | is an alternation operator, and \| is literal.
- If not set, then \| is an alternation operator, and | is literal. */
-#define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1)
-
-/* If this bit is set, then an ending range point collating higher
- than the starting range point, as in [z-a], is invalid.
- If not set, then when ending range point collates higher than the
- starting range point, the range is ignored. */
-#define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1)
-
-/* If this bit is set, then an unmatched ) is ordinary.
- If not set, then an unmatched ) is invalid. */
-#define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1)
-
-/* If this bit is set, succeed as soon as we match the whole pattern,
- without further backtracking. */
-#define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1)
-
-/* This global variable defines the particular regexp syntax to use (for
- some interfaces). When a regexp is compiled, the syntax used is
- stored in the pattern buffer, so changing this does not affect
- already-compiled regexps. */
-extern reg_syntax_t re_syntax_options;
-
-/* Define combinations of the above bits for the standard possibilities.
- (The [[[ comments delimit what gets put into the Texinfo file, so
- don't delete them!) */
-/* [[[begin syntaxes]]] */
-#define RE_SYNTAX_EMACS 0
-
-#define RE_SYNTAX_AWK \
- (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \
- | RE_NO_BK_PARENS | RE_NO_BK_REFS \
- | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \
- | RE_UNMATCHED_RIGHT_PAREN_ORD)
-
-#define RE_SYNTAX_POSIX_AWK \
- (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS)
-
-#define RE_SYNTAX_GREP \
- (RE_BK_PLUS_QM | RE_CHAR_CLASSES \
- | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS \
- | RE_NEWLINE_ALT)
-
-#define RE_SYNTAX_EGREP \
- (RE_CHAR_CLASSES | RE_CONTEXT_INDEP_ANCHORS \
- | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE \
- | RE_NEWLINE_ALT | RE_NO_BK_PARENS \
- | RE_NO_BK_VBAR)
-
-#define RE_SYNTAX_POSIX_EGREP \
- (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES)
-
-/* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */
-#define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC
-
-#define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC
-
-/* Syntax bits common to both basic and extended POSIX regex syntax. */
-#define _RE_SYNTAX_POSIX_COMMON \
- (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \
- | RE_INTERVALS | RE_NO_EMPTY_RANGES)
-
-#define RE_SYNTAX_POSIX_BASIC \
- (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM)
-
-/* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes
- RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this
- isn't minimal, since other operators, such as \`, aren't disabled. */
-#define RE_SYNTAX_POSIX_MINIMAL_BASIC \
- (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS)
-
-#define RE_SYNTAX_POSIX_EXTENDED \
- (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \
- | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \
- | RE_NO_BK_PARENS | RE_NO_BK_VBAR \
- | RE_UNMATCHED_RIGHT_PAREN_ORD)
-
-/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INVALID_OPS
- replaces RE_CONTEXT_INDEP_OPS and RE_NO_BK_REFS is added. */
-#define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \
- (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \
- | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \
- | RE_NO_BK_PARENS | RE_NO_BK_REFS \
- | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD)
-/* [[[end syntaxes]]] */
-
-/* Maximum number of duplicates an interval can allow. Some systems
- (erroneously) define this in other header files, but we want our
- value, so remove any previous define. */
-#ifdef RE_DUP_MAX
-#undef RE_DUP_MAX
-#endif
-#define RE_DUP_MAX ((1 << 15) - 1)
-
-
-/* POSIX `cflags' bits (i.e., information for `regcomp'). */
-
-/* If this bit is set, then use extended regular expression syntax.
- If not set, then use basic regular expression syntax. */
-#define REG_EXTENDED 1
-
-/* If this bit is set, then ignore case when matching.
- If not set, then case is significant. */
-#define REG_ICASE (REG_EXTENDED << 1)
-
-/* If this bit is set, then anchors do not match at newline
- characters in the string.
- If not set, then anchors do match at newlines. */
-#define REG_NEWLINE (REG_ICASE << 1)
-
-/* If this bit is set, then report only success or fail in regexec.
- If not set, then returns differ between not matching and errors. */
-#define REG_NOSUB (REG_NEWLINE << 1)
-
-
-/* POSIX `eflags' bits (i.e., information for regexec). */
-
-/* If this bit is set, then the beginning-of-line operator doesn't match
- the beginning of the string (presumably because it's not the
- beginning of a line).
- If not set, then the beginning-of-line operator does match the
- beginning of the string. */
-#define REG_NOTBOL 1
-
-/* Like REG_NOTBOL, except for the end-of-line. */
-#define REG_NOTEOL (1 << 1)
-
-
-/* If any error codes are removed, changed, or added, update the
- `re_error_msg' table in regex.c. */
-typedef enum
-{
- REG_NOERROR = 0, /* Success. */
- REG_NOMATCH, /* Didn't find a match (for regexec). */
-
- /* POSIX regcomp return error codes. (In the order listed in the
- standard.) */
- REG_BADPAT, /* Invalid pattern. */
- REG_ECOLLATE, /* Not implemented. */
- REG_ECTYPE, /* Invalid character class name. */
- REG_EESCAPE, /* Trailing backslash. */
- REG_ESUBREG, /* Invalid back reference. */
- REG_EBRACK, /* Unmatched left bracket. */
- REG_EPAREN, /* Parenthesis imbalance. */
- REG_EBRACE, /* Unmatched \{. */
- REG_BADBR, /* Invalid contents of \{\}. */
- REG_ERANGE, /* Invalid range end. */
- REG_ESPACE, /* Ran out of memory. */
- REG_BADRPT, /* No preceding re for repetition op. */
-
- /* Error codes we've added. */
- REG_EEND, /* Premature end. */
- REG_ESIZE, /* Compiled pattern bigger than 2^16 bytes. */
- REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */
-} reg_errcode_t;
-
-/* This data structure represents a compiled pattern. Before calling
- the pattern compiler, the fields `buffer', `allocated', `fastmap',
- `translate', and `no_sub' can be set. After the pattern has been
- compiled, the `re_nsub' field is available. All other fields are
- private to the regex routines. */
-
-#ifndef RE_TRANSLATE_TYPE
-#define RE_TRANSLATE_TYPE char *
-#endif
-
-struct re_pattern_buffer
-{
-/* [[[begin pattern_buffer]]] */
- /* Space that holds the compiled pattern. It is declared as
- `unsigned char *' because its elements are
- sometimes used as array indexes. */
- unsigned char *buffer;
-
- /* Number of bytes to which `buffer' points. */
- unsigned long allocated;
-
- /* Number of bytes actually used in `buffer'. */
- unsigned long used;
-
- /* Syntax setting with which the pattern was compiled. */
- reg_syntax_t syntax;
-
- /* Pointer to a fastmap, if any, otherwise zero. re_search uses
- the fastmap, if there is one, to skip over impossible
- starting points for matches. */
- char *fastmap;
-
- /* Either a translate table to apply to all characters before
- comparing them, or zero for no translation. The translation
- is applied to a pattern when it is compiled and to a string
- when it is matched. */
- RE_TRANSLATE_TYPE translate;
-
- /* Number of subexpressions found by the compiler. */
- size_t re_nsub;
-
- /* Zero if this pattern cannot match the empty string, one else.
- Well, in truth it's used only in `re_search_2', to see
- whether or not we should use the fastmap, so we don't set
- this absolutely perfectly; see `re_compile_fastmap' (the
- `duplicate' case). */
- unsigned can_be_null : 1;
-
- /* If REGS_UNALLOCATED, allocate space in the `regs' structure
- for `max (RE_NREGS, re_nsub + 1)' groups.
- If REGS_REALLOCATE, reallocate space if necessary.
- If REGS_FIXED, use what's there. */
-#define REGS_UNALLOCATED 0
-#define REGS_REALLOCATE 1
-#define REGS_FIXED 2
- unsigned regs_allocated : 2;
-
- /* Set to zero when `regex_compile' compiles a pattern; set to one
- by `re_compile_fastmap' if it updates the fastmap. */
- unsigned fastmap_accurate : 1;
-
- /* If set, `re_match_2' does not return information about
- subexpressions. */
- unsigned no_sub : 1;
-
- /* If set, a beginning-of-line anchor doesn't match at the
- beginning of the string. */
- unsigned not_bol : 1;
-
- /* Similarly for an end-of-line anchor. */
- unsigned not_eol : 1;
-
- /* If true, an anchor at a newline matches. */
- unsigned newline_anchor : 1;
-
-/* [[[end pattern_buffer]]] */
-};
-
-typedef struct re_pattern_buffer regex_t;
-
-/* Type for byte offsets within the string. POSIX mandates this. */
-typedef int regoff_t;
-
-
-/* This is the structure we store register match data in. See
- regex.texinfo for a full description of what registers match. */
-struct re_registers
-{
- unsigned num_regs;
- regoff_t *start;
- regoff_t *end;
-};
-
-
-/* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer,
- `re_match_2' returns information about at least this many registers
- the first time a `regs' structure is passed. */
-#ifndef RE_NREGS
-#define RE_NREGS 30
-#endif
-
-
-/* POSIX specification for registers. Aside from the different names than
- `re_registers', POSIX uses an array of structures, instead of a
- structure of arrays. */
-typedef struct
-{
- regoff_t rm_so; /* Byte offset from string's start to substring's start. */
- regoff_t rm_eo; /* Byte offset from string's start to substring's end. */
-} regmatch_t;
-
-/* Declarations for routines. */
-
-/* To avoid duplicating every routine declaration -- once with a
- prototype (if we are ANSI), and once without (if we aren't) -- we
- use the following macro to declare argument types. This
- unfortunately clutters up the declarations a bit, but I think it's
- worth it. */
-
-#if __STDC__
-
-#define _RE_ARGS(args) args
-
-#else /* not __STDC__ */
-
-#define _RE_ARGS(args) ()
-
-#endif /* not __STDC__ */
-
-/* Sets the current default syntax to SYNTAX, and return the old syntax.
- You can also simply assign to the `re_syntax_options' variable. */
-extern reg_syntax_t re_set_syntax _RE_ARGS ((reg_syntax_t syntax));
-
-/* Compile the regular expression PATTERN, with length LENGTH
- and syntax given by the global `re_syntax_options', into the buffer
- BUFFER. Return NULL if successful, and an error string if not. */
-extern const char *re_compile_pattern
- _RE_ARGS ((const char *pattern, int length,
- struct re_pattern_buffer *buffer));
-
-
-/* Compile a fastmap for the compiled pattern in BUFFER; used to
- accelerate searches. Return 0 if successful and -2 if was an
- internal error. */
-extern int re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer));
-
-
-/* Search in the string STRING (with length LENGTH) for the pattern
- compiled into BUFFER. Start searching at position START, for RANGE
- characters. Return the starting position of the match, -1 for no
- match, or -2 for an internal error. Also return register
- information in REGS (if REGS and BUFFER->no_sub are nonzero). */
-extern int re_search
- _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
- int length, int start, int range, struct re_registers *regs));
-
-
-/* Like `re_search', but search in the concatenation of STRING1 and
- STRING2. Also, stop searching at index START + STOP. */
-extern int re_search_2
- _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
- int length1, const char *string2, int length2,
- int start, int range, struct re_registers *regs, int stop));
-
-
-/* Like `re_search', but return how many characters in STRING the regexp
- in BUFFER matched, starting at position START. */
-extern int re_match
- _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
- int length, int start, struct re_registers *regs));
-
-
-/* Relates to `re_match' as `re_search_2' relates to `re_search'. */
-extern int re_match_2
- _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
- int length1, const char *string2, int length2,
- int start, struct re_registers *regs, int stop));
-
-
-/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
- ENDS. Subsequent matches using BUFFER and REGS will use this memory
- for recording register information. STARTS and ENDS must be
- allocated with malloc, and must each be at least `NUM_REGS * sizeof
- (regoff_t)' bytes long.
-
- If NUM_REGS == 0, then subsequent matches should allocate their own
- register data.
-
- Unless this function is called, the first search or match using
- PATTERN_BUFFER will allocate its own register data, without
- freeing the old data. */
-extern void re_set_registers
- _RE_ARGS ((struct re_pattern_buffer *buffer, struct re_registers *regs,
- unsigned num_regs, regoff_t *starts, regoff_t *ends));
-
-#ifdef _REGEX_RE_COMP
-/* 4.2 bsd compatibility. */
-extern char *re_comp _RE_ARGS ((const char *));
-extern int re_exec _RE_ARGS ((const char *));
-#endif
-
-/* POSIX compatibility. */
-extern int regcomp _RE_ARGS ((regex_t *preg, const char *pattern, int cflags));
-extern int regexec
- _RE_ARGS ((const regex_t *preg, const char *string, size_t nmatch,
- regmatch_t pmatch[], int eflags));
-extern size_t regerror
- _RE_ARGS ((int errcode, const regex_t *preg, char *errbuf,
- size_t errbuf_size));
-extern void regfree _RE_ARGS ((regex_t *preg));
-
-#endif /* not __REGEXP_LIBRARY_H__ */
-
-/*
-Local variables:
-make-backup-files: t
-version-control: t
-trim-versions-without-asking: nil
-End:
-*/
diff --git a/util/skiplist.c b/util/skiplist.c
deleted file mode 100644
index a05ec30..0000000
--- a/util/skiplist.c
+++ /dev/null
@@ -1,632 +0,0 @@
-/*
- *
- * Thread-safe Skiplist Using Integer Identifiers
- * Copyright 1998-2000 Scott Shambarger (scott@shambarger.net)
- *
- * This software is open source. Permission to use, copy, modify, and
- * distribute this software for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies. No
- * warranty of any kind is expressed or implied. Use at your own risk.
- *
- * 1/14/2001 blong
- * Made it use neo errs... probably need to check locking functions
- * for error returns...
- *
- */
-
-#include "cs_config.h"
-
-#include <stdlib.h>
-#include <assert.h>
-#include <string.h>
-
-#include "neo_misc.h"
-#include "neo_err.h"
-#include "skiplist.h"
-#include "ulocks.h"
-
-typedef struct skipItem *skipItem;
-
-/* structure is sized on allocation based on its level */
-struct skipItem {
- UINT32 locks; /* count of locks on value */
- UINT32 key; /* item's key */
- void *value; /* item's value */
- INT32 level; /* item level */
- skipItem next[1]; /* array of next items */
-};
-
-#define SIZEOFITEM(max) (sizeof(struct skipItem) + \
- ((max+1) * sizeof(skipItem)))
-
-struct skipList_struct {
- INT32 topLevel; /* current max level in any item */
- INT32 levelHint; /* hint at level to start search */
- skipItem header; /* header item (has all levels) */
- skipItem tail; /* tail item (has all levels) */
-
- /* elements to handle cached deleted items */
- skipItem deleted; /* cached deleted items (linked by level+1 next entries) */
- UINT32 cached; /* number of cached deleted items */
-
- int flushing; /* TRUE if thread waiting to flush cached items */
- UINT32 readers; /* number of current readers */
- int block; /* TRUE if readers should wait */
-
- pthread_mutex_t read; /* readers count/cond wait mutex */
- pthread_mutex_t write; /* writer mutex */
- pthread_cond_t resume; /* condition to wait on to resume reads */
- pthread_cond_t flush; /* condition to wait on for flush */
-
- /* list constants */
- int threaded; /* TRUE if list needs to be thread safe */
- UINT32 flushLimit; /* max number of cached deleted items before flush */
- INT32 maxLevel; /* max level list can reach */
- double randLimit; /* min random value to jump levels */
- skipFreeValue freeValue; /* free value callback */
- void *freeValueCtx; /* context to pass to <freeValue> callback */
-};
-
-static void readLock(skipList list) {
-
- mLock(&list->read);
-
- if(list->block)
- cWait(&list->resume, &list->read);
-
- list->readers++;
-
- mUnlock(&list->read);
-
- return;
-}
-
-static void readUnlock(skipList list, skipItem x, void **plock) {
-
- int startFlush = FALSE;
-
- if(list->threaded)
- mLock(&list->read);
-
- if(plock) {
- x->locks++;
- *plock = x;
- }
-
- if(! list->threaded)
- return;
-
- list->readers--;
-
- if((list->readers == 0) && list->block)
- startFlush = TRUE;
-
- mUnlock(&list->read);
-
- if(startFlush)
- cSignal(&list->flush);
-
- return;
-}
-
-static void readBlock(skipList list) {
-
- mLock(&list->read);
-
- list->block = TRUE;
-
- if(list->readers)
- cWait(&list->flush, &list->read); /* wait until reader locks released */
-
- return;
-}
-
-static void readUnblock(skipList list) {
-
- list->block = FALSE;
-
- mUnlock(&list->read);
-
- cBroadcast(&list->resume);
-
- return;
-}
-
-
-static void writeLock(skipList list) {
-
- mLock(&list->write);
-
- return;
-}
-
-static void writeUnlock(skipList list) {
-
- mUnlock(&list->write);
-
- return;
-}
-
-static NEOERR *skipAllocItem(skipItem *item, UINT32 level, UINT32 key,
- void *value)
-{
-
- if(! (*item = malloc(SIZEOFITEM(level))))
- return nerr_raise(NERR_NOMEM, "Unable to allocate space for skipItem");
-
- /* init new item */
- (*item)->locks = 0;
- (*item)->key = key;
- (*item)->value = value;
- (*item)->level = level;
-
- return STATUS_OK;
-}
-
-static void skipFreeItem(skipList list, skipItem item) {
-
- if(list->freeValue)
- list->freeValue(item->value, list->freeValueCtx); /* free value */
-
- free(item); /* release item */
-
- return;
-}
-
-static void skipFlushDeleted(skipList list, int force) {
-
- skipItem x, y, next;
-
- x = list->deleted;
- y = x->next[x->level + 1];
-
- while(y != list->tail) {
-
- next = y->next[y->level + 1];
-
- if(force || (! y->locks)) { /* check if value currently locked */
-
- x->next[x->level + 1] = next; /* set previous item's next link */
- skipFreeItem(list, y); /* free item */
-
- list->cached--; /* update cached count */
- }
- else {
- x = y; /* make this item the previous item */
- }
-
- y = next; /* advance to next item */
- }
-
- return;
-}
-
-static void skipWriteUnlock(skipList list) {
-
- int flush;
-
- if(! list->threaded)
- return;
-
- if((list->cached > list->flushLimit) && (! list->flushing)) {
- list->flushing = TRUE;
- flush = TRUE;
- }
- else {
- flush = FALSE;
- }
-
- writeUnlock(list); /* let any pending writes complete */
- readUnlock(list, NULL, NULL); /* no longer reading */
-
- if(flush) {
- /* we are now flushing deleted items */
-
- readBlock(list); /* acquire all read locks */
-
- /* at this point no readers/writers are active */
-
- skipFlushDeleted(list, FALSE); /* flush deleted items */
-
- list->flushing = FALSE; /* done flushing */
-
- readUnblock(list); /* let everyone continue */
- }
-
- return;
-}
-
-static skipItem skipFind(skipList list, UINT32 key) {
-
- skipItem x, y = NULL;
- INT32 i;
-
- if(list->threaded)
- readLock(list);
-
- x = list->header; /* header contains all levels */
-
- for(i = list->levelHint; /* loop from levelHint level down to level 0 */
- i >= 0;
- i--) {
-
- y = x->next[i]; /* get next item at new level */
-
- while(y->key < key) { /* if y has a smaller key, try the next item */
- x = y; /* save x in case we overshoot */
- y = x->next[i]; /* get next item */
- }
- }
-
- return y;
-}
-
-void *skipSearch(skipList list, UINT32 key, void **plock) {
-
- skipItem y;
- void *value;
-
- y = skipFind(list, key); /* find item */
-
- if(y->key == key) { /* y has our key, or it isn't here */
- value = y->value;
- }
- else { /* didn't find item, don't allow locks */
- value = NULL;
- plock = NULL;
- }
-
- readUnlock(list, y, plock);
-
- return value;
-}
-
-void *skipNext(skipList list, UINT32 *pkey, void **plock) {
-
- skipItem y;
- void *value;
-
- y = skipFind(list, *pkey); /* find item */
-
- if((y->key == *pkey) && (y != list->tail)) /* skip to next if found y */
- y = y->next[0];
-
- if(y != list->tail) { /* reset key to next, return value */
- *pkey = y->key;
- value = y->value;
- }
- else { /* no next item, don't allow locks */
- value = NULL;
- plock = NULL;
- }
-
- readUnlock(list, y, plock);
-
- return value;
-}
-
-void skipRelease(skipList list, void *lock) {
-
- skipItem x;
-
- mLock(&list->read);
-
- x = lock;
- x->locks--;
-
- mUnlock(&list->read);
-
- return;
-}
-
-/* list is write locked */
-static NEOERR *skipNewItem(skipList list, skipItem *item, UINT32 key,
- void *value)
-{
-
- INT32 level = 0;
-
- while((drand48() < list->randLimit) && (level < list->maxLevel))
- level++;
-
- if(level > list->topLevel) {
-
- if(list->topLevel < list->maxLevel)
- list->topLevel++;
-
- level = list->topLevel;
- }
-
- return skipAllocItem(item, level, key, value);
-}
-
-/* list is write locked */
-static void skipDeleteItem(skipList list, skipItem item) {
-
- if(list->threaded) {
- item->next[item->level + 1] = list->deleted->next[1];
- list->cached++;
- list->deleted->next[1] = item;
- }
- else {
- skipFreeItem(list, item);
- }
-
- return;
-}
-
-NEOERR *skipNewList(skipList *skip, int threaded, int root, int maxLevel,
- int flushLimit, skipFreeValue freeValue, void *ctx)
-{
- NEOERR *err;
- skipList list;
- UINT32 i;
-
- *skip = NULL;
- if(! (list = calloc(1, sizeof(struct skipList_struct))))
- return nerr_raise(NERR_NOMEM, "Unable to allocate memore for skiplist");
-
- if (maxLevel == 0)
- return nerr_raise(NERR_ASSERT, "maxLevel must be greater than 0");
-
- if(maxLevel >= SKIP_MAXLEVEL) /* check limits */
- maxLevel = SKIP_MAXLEVEL-1;
-
- if(root > 4)
- root = 4;
- else if(root < 2)
- root = 2;
-
- list->maxLevel = maxLevel; /* init list constants */
- list->randLimit = 1.0 / (double)root;
- list->threaded = threaded;
- list->freeValue = freeValue;
- list->freeValueCtx = ctx;
-
- do {
- if(threaded) {
-
- list->flushLimit = flushLimit;
-
- err = mCreate(&list->read);
- if (err != STATUS_OK) break;
-
- err = mCreate(&list->write);
- if (err != STATUS_OK) break;
-
- err = cCreate(&list->resume);
- if (err != STATUS_OK) break;
-
- err = cCreate(&list->flush);
- if (err != STATUS_OK) break;
- }
-
- err = skipAllocItem(&(list->header), list->maxLevel, 0, NULL);
- if (err != STATUS_OK) break;
- err = skipAllocItem(&(list->tail), list->maxLevel, (UINT32)-1, NULL);
- if (err != STATUS_OK) break;
- err = skipAllocItem(&(list->deleted), 0, 0, NULL);
- if (err != STATUS_OK) break;
-
- for(i = 0; /* init header and tail */
- i <= list->maxLevel;
- i++) {
- list->tail->next[i] = NULL;
- list->header->next[i] = list->tail;
- }
-
- list->deleted->next[1] = list->tail;
-
- *skip = list;
- return STATUS_OK; /* return new list */
-
- } while(FALSE);
-
- if(list->header) /* failed to make list, bail */
- free(list->header);
- free(list);
-
- return nerr_pass(err);
-}
-
-/* list considered locked */
-static void skipFreeAllItems(skipList list) {
-
- UINT32 i;
- skipItem x, y;
-
- x = list->header->next[0];
-
- while(x != list->tail) {
- y = x->next[0]; /* get next item from level 0 pointer */
- skipFreeItem(list, x); /* release item */
- x = y;
- }
- /* clear header pointers */
- for(i = 0;
- i <= list->maxLevel;
- i++)
- list->header->next[i] = list->tail;
-
- return;
-}
-
-void skipFreeList(skipList list) {
-
- skipFlushDeleted(list, TRUE); /* flush deleted items */
-
- skipFreeAllItems(list); /* free list items */
-
- if(list->threaded) {
- cDestroy(&list->flush);
- cDestroy(&list->resume);
- mDestroy(&list->write);
- mDestroy(&list->read);
- }
-
- free(list->tail); /* free list */
- free(list->header);
- free(list->deleted);
- free(list);
-
- return;
-}
-
-/* <list> is locked, <x> is at least level <level>, and <x>->key < <key> */
-static skipItem skipClosest(skipItem x, UINT32 key, UINT32 level) {
-
- skipItem y;
-
- y = x->next[level]; /* get next item at this level */
-
- while(y->key < key) { /* ensure that we have the item before the key */
- x = y;
- y = x->next[level];
- }
-
- return x;
-}
-
-static skipItem skipLock(skipList list, UINT32 key, skipItem *save, INT32 top) {
-
- INT32 i;
- skipItem x, y;
-
- if(list->threaded)
- readLock(list);
-
- x = list->header; /* header contains all levels */
-
- for(i = top; /* loop from top level down to level 0 */
- i >= 0;
- i--) {
-
- y = x->next[i]; /* get next item at this level */
-
- while(y->key < key) { /* if y has a smaller key, try the next item */
- x = y; /* save x in case we overshoot */
- y = x->next[i]; /* get next item */
- }
-
- save[i] = x; /* preserve item with next pointer in save */
- }
-
- if(list->threaded)
- writeLock(list); /* lock list for update */
-
- /* validate we have the closest previous item */
- return skipClosest(x, key, 0);
-}
-
-NEOERR *skipInsert(skipList list, UINT32 key, void *value, int allowUpdate)
-{
- NEOERR *err;
- INT32 i, level;
- skipItem save[SKIP_MAXLEVEL];
- skipItem x, y;
-
- if (value == 0)
- return nerr_raise(NERR_ASSERT, "value must be non-zero");
- if (key == 0 || key == (UINT32)-1)
- return nerr_raise(NERR_ASSERT, "key must not be 0 or -1");
-
- level = list->levelHint;
-
- x = skipLock(list, key, save, level); /* quick search for key */
-
- y = x->next[0];
-
- if(y->key == key) {
-
- if(!allowUpdate)
- {
- skipWriteUnlock(list);
- return nerr_raise(NERR_DUPLICATE, "key %u exists in skiplist", key);
- }
-
- y->value = value; /* found the key, update value */
- skipWriteUnlock(list);
- return STATUS_OK;
- }
-
- err = skipNewItem(list, &y, key, value);
- if (err != STATUS_OK)
- {
- skipWriteUnlock(list);
- return nerr_pass(err);
- }
-
- for(i = level + 1; /* is new item has more levels than <level> */
- i <= y->level; /* if so fill in save */
- i++)
- save[i] = list->header;
-
- for(i = 0; /* populate pointers for all levels */
- i <= y->level;
- i++) {
-
- if(i) /* check that save is correct for each level */
- x = skipClosest(save[i], key, i);
-
- y->next[i] = x->next[i]; /* now insert the item at this level */
- x->next[i] = y; /* (order here important for thread-safeness) */
- }
-
- while((list->levelHint < list->topLevel) /* update levelHint */
- && (list->header->next[list->levelHint+1] != list->tail))
- list->levelHint++;
-
- skipWriteUnlock(list);
-
- return STATUS_OK;
-}
-
-void skipDelete(skipList list, UINT32 key) {
-
- INT32 i, level;
- skipItem save[SKIP_MAXLEVEL];
- skipItem x, y;
-
- assert(key && (key != (UINT32)-1));
-
- level = list->levelHint;
-
- x = skipLock(list, key, save, level); /* quick search for key */
-
- y = x->next[0];
-
- /* check that we found the key, and it isn't deleted */
- if((y->key != key) || (y->next[0]->key < key)) {
- skipWriteUnlock(list);
- return;
- }
-
- for(i = level + 1; /* check if item has more levels than <level> */
- i <= y->level; /* if so fill in save */
- i++)
- save[i] = list->header;
-
- for(i = y->level;
- i >= 0;
- i--) {
-
- /* check that save is correct for each level */
- x = skipClosest(save[i], key, i);
-
- x->next[i] = y->next[i]; /* now remove item at this level */
- y->next[i] = x; /* (order here is imported for thread-safeness) */
- }
-
- skipDeleteItem(list, y); /* put on deleted list */
-
- while((list->levelHint > 0) /* update levelHint */
- && (list->header->next[list->levelHint] == list->tail))
- list->levelHint--;
-
- skipWriteUnlock(list);
-
- return;
-}
-
-
-
diff --git a/util/skiplist.h b/util/skiplist.h
deleted file mode 100644
index 224f1ff..0000000
--- a/util/skiplist.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- *
- * Thread-safe Skiplist Using Integer Identifiers
- * Copyright 1998-2000 Scott Shambarger (scott@shambarger.net)
- *
- * This software is open source. Permission to use, copy, modify, and
- * distribute this software for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies. No
- * warranty of any kind is expressed or implied. Use at your own risk.
- *
- * 1/14/2001 blong
- * Made it use neo errs... probably need to check locking functions
- * for error returns...
- *
- */
-
-#ifndef __SKIPLIST_H_
-#define __SKIPLIST_H_
-
-#include "util/neo_err.h"
-
-__BEGIN_DECLS
-
-/*
- * Larger values of <root> means fewer levels and faster lookups,
- * but more variability in those lookup times (range limited from 2 to 4).
- *
- * <maxLevel> should be calculated from expected list size using (^ = power):
- *
- * <root> ^ <maxLevel> == expected # of items
- *
- * I've capped <maxLevel> at 20, which would be good for a minimum of
- * 1 million items on lists with <root> == 2.
- *
- *
- * Example
- * skipNewList(&(my_wdb->ondisk), 0, 4, 2, 0, NULL, NULL);
- */
-#define SKIP_MAXLEVEL 20
-
-/* SKIP LIST TYPEDEFS */
-typedef struct skipList_struct *skipList;
-typedef void (*skipFreeValue)(void *value, void *ctx);
-
-NEOERR *skipNewList(skipList *skip, int threaded, int root, int maxLevel,
- int flushLimit, skipFreeValue freeValue, void *ctx);
-/*
- * Function: skipNewList - create a skip list.
- * Description: Returns a new skip list. If <threaded> is true, list is
- * multi-thread safe. <root> and <maxLevel> determine
- * performance and expected size (see discussion above).
- * <flushLimit> is for threaded lists and determines the
- * maximum number of deleted items to keep cached during
- * concurrent searches. Once the limit is reached, new
- * concurrent reads are blocked until all deleted items are
- * flushed.
- * Input: threaded - true if list should be thread-safe.
- * root - performance parameter (see above).
- * maxLevel - performance parameter (see above).
- * flushLimit - max deleted items to keep cached before
- * forcing a flush.
- * freeValue - callback made whenever a value is flushed.
- * ctx - context to pass to <freeValue>.
- * Output: None.
- * Return: New skip list, NULL on error.
- * MT-Level: Safe.
- */
-
-void skipFreeList(skipList list);
-/*
- * Function: skipFreeList - free a skip list.
- * Description: Release all resources used by <list> including all key/value
- * pairs.
- * Input: list - list to free.
- * Output: None.
- * Return: None.
- * MT-Level: Safe for unique <list>.
- */
-
-void *skipNext(skipList list, UINT32 *pkey, void **plock);
-/*
- * Function: skipNext - find next item.
- * Description: Searches in list <list> for item with key next larger
- * that the one in <pkey>, and returns its value if
- * found, or NULL if not. If <plock> is non-NULL, then
- * the lock returned in <plock> will be associated with
- * the returned value. Until this lock is passed to
- * skipRelease(), the value will not be freed with the
- * freeValue callback (see skipNewList()).
- * Input: list - list to search in.
- * pkey - pointer to previous key (0 to start).
- * plock - place for value lock (or NULL).
- * Output: pkey - set to new key.
- * plock - set to value lock.
- * Return: Value associated with new <pkey>, or NULL last item.
- * MT-Level: Safe if <list> thread-safe.
- */
-
-void *skipSearch(skipList list, UINT32 key, void **plock);
-/*
- * Function: skipSearch - search a skip list.
- * Description: Searches for <key> in <list>, and returns value if
- * found, or NULL if not. If <plock> is non-NULL, then
- * the lock returned in <plock> will be associated with
- * the returned value. Until this lock is passed to
- * skipRelease(), the value will not be freed with the
- * freeValue callback (see skipNewList()).
- * Input: list - list to search in.
- * key - key to look for.
- * plock - place for value lock (or NULL).
- * Output: plock - set to value lock.
- * Return: Value associated with <key>, or NULL if <key> not found.
- * MT-Level: Safe if <list> thread-safe.
- */
-
-void skipRelease(skipList list, void *lock);
-/*
- * Function: skipRelease - release lock on value.
- * Description: Releases the lock on the value associated with <lock>. Once
- * the lock is released, the freeValue callback can be called
- * and the item freed (see skipNewList()).
- * Input: list - list containing value to release.
- * lock - lock to release.
- * Output: None.
- * Return: None.
- * MT-Level: Safe if <list> thread-safe.
- */
-
-NEOERR *skipInsert(skipList list, UINT32 key, void *value, int allowUpdate);
-/*
- * Function: skipInsert - insert an item.
- * Description: Inserts the <key>/<value> pair into the <list>.
- * Key values 0 and -1 are reserved (and illegal).
- * If key is already in list, and <allowUpdate> is true,
- * value is updated, otherwise SKIPERR_EXISTS is returned.
- * Input: list - list to add pair to.
- * key - key identifying <value>.
- * value - value to store (may NOT be NULL)
- * Output: None.
- * Return: NERR_ASSERT on invalid key or value
- * NERR_DUPLICATE if allowUpdate is 0 and key exists
- * NERR_NOMEM
- * MT-Level: Safe if <list> thread-safe.
- */
-
-void skipDelete(skipList list, UINT32 key);
-/*
- * Function: skipDelete - delete an item.
- * Description: Delete the item associated with <key> from <list>.
- * Input: list - list to delete item from.
- * key - key identifying value to delete.
- * Output: None.
- * Return: None.
- * MT-Level: Safe if <list> thread-safe.
- */
-
-__END_DECLS
-
-#endif /* __SKIPLIST_H_ */
-
-
-
-
-
-
diff --git a/util/snprintf.c b/util/snprintf.c
deleted file mode 100644
index 5546fff..0000000
--- a/util/snprintf.c
+++ /dev/null
@@ -1,832 +0,0 @@
-/*
- * Copyright Patrick Powell 1995
- * This code is based on code written by Patrick Powell (papowell@astart.com)
- * It may be used for any purpose as long as this notice remains intact
- * on all source code distributions
- */
-
-/**************************************************************
- * Original:
- * Patrick Powell Tue Apr 11 09:48:21 PDT 1995
- * A bombproof version of doprnt (dopr) included.
- * Sigh. This sort of thing is always nasty do deal with. Note that
- * the version here does not include floating point...
- *
- * snprintf() is used instead of sprintf() as it does limit checks
- * for string length. This covers a nasty loophole.
- *
- * The other functions are there to prevent NULL pointers from
- * causing nast effects.
- *
- * More Recently:
- * Brandon Long <blong@fiction.net> 9/15/96 for mutt 0.43
- * This was ugly. It is still ugly. I opted out of floating point
- * numbers, but the formatter understands just about everything
- * from the normal C string format, at least as far as I can tell from
- * the Solaris 2.5 printf(3S) man page.
- *
- * Brandon Long <blong@fiction.net> 10/22/97 for mutt 0.87.1
- * Ok, added some minimal floating point support, which means this
- * probably requires libm on most operating systems. Don't yet
- * support the exponent (e,E) and sigfig (g,G). Also, fmtint()
- * was pretty badly broken, it just wasn't being exercised in ways
- * which showed it, so that's been fixed. Also, formated the code
- * to mutt conventions, and removed dead code left over from the
- * original. Also, there is now a builtin-test, just compile with:
- * gcc -DTEST_SNPRINTF -o snprintf snprintf.c -lm
- * and run snprintf for results.
- *
- * Thomas Roessler <roessler@guug.de> 01/27/98 for mutt 0.89i
- * The PGP code was using unsigned hexadecimal formats.
- * Unfortunately, unsigned formats simply didn't work.
- *
- * Michael Elkins <me@cs.hmc.edu> 03/05/98 for mutt 0.90.8
- * The original code assumed that both snprintf() and vsnprintf() were
- * missing. Some systems only have snprintf() but not vsnprintf(), so
- * the code is now broken down under HAVE_SNPRINTF and HAVE_VSNPRINTF.
- *
- * Andrew Tridgell (tridge@samba.org) Oct 1998
- * fixed handling of %.0f
- * added test for HAVE_LONG_DOUBLE
- *
- * Russ Allbery <rra@stanford.edu> 2000-08-26
- * fixed return value to comply with C99
- * fixed handling of snprintf(NULL, ...)
- *
- **************************************************************/
-
-#include "cs_config.h"
-
-#if !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF)
-
-#include <string.h>
-#include <ctype.h>
-#include <sys/types.h>
-
-/* Define this as a fall through, HAVE_STDARG_H is probably already set */
-
-#define HAVE_VARARGS_H
-
-
-/* varargs declarations: */
-
-#if defined(HAVE_STDARG_H)
-# include <stdarg.h>
-# define HAVE_STDARGS /* let's hope that works everywhere (mj) */
-# define VA_LOCAL_DECL va_list ap
-# define VA_START(f) va_start(ap, f)
-# define VA_SHIFT(v,t) ; /* no-op for ANSI */
-# define VA_END va_end(ap)
-#else
-# if defined(HAVE_VARARGS_H)
-# include <varargs.h>
-# undef HAVE_STDARGS
-# define VA_LOCAL_DECL va_list ap
-# define VA_START(f) va_start(ap) /* f is ignored! */
-# define VA_SHIFT(v,t) v = va_arg(ap,t)
-# define VA_END va_end(ap)
-# else
-/*XX ** NO VARARGS ** XX*/
-# endif
-#endif
-
-#ifdef HAVE_LONG_DOUBLE
-#define LDOUBLE long double
-#else
-#define LDOUBLE double
-#endif
-
-int snprintf (char *str, size_t count, const char *fmt, ...);
-int vsnprintf (char *str, size_t count, const char *fmt, va_list arg);
-
-static int dopr (char *buffer, size_t maxlen, const char *format,
- va_list args);
-static int fmtstr (char *buffer, size_t *currlen, size_t maxlen,
- char *value, int flags, int min, int max);
-static int fmtint (char *buffer, size_t *currlen, size_t maxlen,
- long value, int base, int min, int max, int flags);
-static int fmtfp (char *buffer, size_t *currlen, size_t maxlen,
- LDOUBLE fvalue, int min, int max, int flags);
-static int dopr_outch (char *buffer, size_t *currlen, size_t maxlen, char c );
-
-/*
- * dopr(): poor man's version of doprintf
- */
-
-/* format read states */
-#define DP_S_DEFAULT 0
-#define DP_S_FLAGS 1
-#define DP_S_MIN 2
-#define DP_S_DOT 3
-#define DP_S_MAX 4
-#define DP_S_MOD 5
-#define DP_S_CONV 6
-#define DP_S_DONE 7
-
-/* format flags - Bits */
-#define DP_F_MINUS (1 << 0)
-#define DP_F_PLUS (1 << 1)
-#define DP_F_SPACE (1 << 2)
-#define DP_F_NUM (1 << 3)
-#define DP_F_ZERO (1 << 4)
-#define DP_F_UP (1 << 5)
-#define DP_F_UNSIGNED (1 << 6)
-
-/* Conversion Flags */
-#define DP_C_SHORT 1
-#define DP_C_LONG 2
-#define DP_C_LDOUBLE 3
-
-#define char_to_int(p) (p - '0')
-#define MAX(p,q) ((p >= q) ? p : q)
-#define MIN(p,q) ((p <= q) ? p : q)
-
-static int dopr (char *buffer, size_t maxlen, const char *format, va_list args)
-{
- char ch;
- long value;
- LDOUBLE fvalue;
- char *strvalue;
- int min;
- int max;
- int state;
- int flags;
- int cflags;
- int total;
- size_t currlen;
-
- state = DP_S_DEFAULT;
- currlen = flags = cflags = min = 0;
- max = -1;
- ch = *format++;
- total = 0;
-
- while (state != DP_S_DONE)
- {
- if (ch == '\0')
- state = DP_S_DONE;
-
- switch(state)
- {
- case DP_S_DEFAULT:
- if (ch == '%')
- state = DP_S_FLAGS;
- else
- total += dopr_outch (buffer, &currlen, maxlen, ch);
- ch = *format++;
- break;
- case DP_S_FLAGS:
- switch (ch)
- {
- case '-':
- flags |= DP_F_MINUS;
- ch = *format++;
- break;
- case '+':
- flags |= DP_F_PLUS;
- ch = *format++;
- break;
- case ' ':
- flags |= DP_F_SPACE;
- ch = *format++;
- break;
- case '#':
- flags |= DP_F_NUM;
- ch = *format++;
- break;
- case '0':
- flags |= DP_F_ZERO;
- ch = *format++;
- break;
- default:
- state = DP_S_MIN;
- break;
- }
- break;
- case DP_S_MIN:
- if (isdigit(ch))
- {
- min = 10*min + char_to_int (ch);
- ch = *format++;
- }
- else if (ch == '*')
- {
- min = va_arg (args, int);
- ch = *format++;
- state = DP_S_DOT;
- }
- else
- state = DP_S_DOT;
- break;
- case DP_S_DOT:
- if (ch == '.')
- {
- state = DP_S_MAX;
- ch = *format++;
- }
- else
- state = DP_S_MOD;
- break;
- case DP_S_MAX:
- if (isdigit(ch))
- {
- if (max < 0)
- max = 0;
- max = 10*max + char_to_int (ch);
- ch = *format++;
- }
- else if (ch == '*')
- {
- max = va_arg (args, int);
- ch = *format++;
- state = DP_S_MOD;
- }
- else
- state = DP_S_MOD;
- break;
- case DP_S_MOD:
- /* Currently, we don't support Long Long, bummer */
- switch (ch)
- {
- case 'h':
- cflags = DP_C_SHORT;
- ch = *format++;
- break;
- case 'l':
- cflags = DP_C_LONG;
- ch = *format++;
- break;
- case 'L':
- cflags = DP_C_LDOUBLE;
- ch = *format++;
- break;
- default:
- break;
- }
- state = DP_S_CONV;
- break;
- case DP_S_CONV:
- switch (ch)
- {
- case 'd':
- case 'i':
- if (cflags == DP_C_SHORT)
- value = va_arg (args, short int);
- else if (cflags == DP_C_LONG)
- value = va_arg (args, long int);
- else
- value = va_arg (args, int);
- total += fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags);
- break;
- case 'o':
- flags |= DP_F_UNSIGNED;
- if (cflags == DP_C_SHORT)
- value = va_arg (args, unsigned short int);
- else if (cflags == DP_C_LONG)
- value = va_arg (args, unsigned long int);
- else
- value = va_arg (args, unsigned int);
- total += fmtint (buffer, &currlen, maxlen, value, 8, min, max, flags);
- break;
- case 'u':
- flags |= DP_F_UNSIGNED;
- if (cflags == DP_C_SHORT)
- value = va_arg (args, unsigned short int);
- else if (cflags == DP_C_LONG)
- value = va_arg (args, unsigned long int);
- else
- value = va_arg (args, unsigned int);
- total += fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags);
- break;
- case 'X':
- flags |= DP_F_UP;
- case 'x':
- flags |= DP_F_UNSIGNED;
- if (cflags == DP_C_SHORT)
- value = va_arg (args, unsigned short int);
- else if (cflags == DP_C_LONG)
- value = va_arg (args, unsigned long int);
- else
- value = va_arg (args, unsigned int);
- total += fmtint (buffer, &currlen, maxlen, value, 16, min, max, flags);
- break;
- case 'f':
- if (cflags == DP_C_LDOUBLE)
- fvalue = va_arg (args, LDOUBLE);
- else
- fvalue = va_arg (args, double);
- /* um, floating point? */
- total += fmtfp (buffer, &currlen, maxlen, fvalue, min, max, flags);
- break;
- case 'E':
- flags |= DP_F_UP;
- case 'e':
- if (cflags == DP_C_LDOUBLE)
- fvalue = va_arg (args, LDOUBLE);
- else
- fvalue = va_arg (args, double);
- break;
- case 'G':
- flags |= DP_F_UP;
- case 'g':
- if (cflags == DP_C_LDOUBLE)
- fvalue = va_arg (args, LDOUBLE);
- else
- fvalue = va_arg (args, double);
- break;
- case 'c':
- total += dopr_outch (buffer, &currlen, maxlen, va_arg (args, int));
- break;
- case 's':
- strvalue = va_arg (args, char *);
- total += fmtstr (buffer, &currlen, maxlen, strvalue, flags, min, max);
- break;
- case 'p':
- strvalue = va_arg (args, void *);
- total += fmtint (buffer, &currlen, maxlen, (long) strvalue, 16, min,
- max, flags);
- break;
- case 'n':
- if (cflags == DP_C_SHORT)
- {
- short int *num;
- num = va_arg (args, short int *);
- *num = currlen;
- }
- else if (cflags == DP_C_LONG)
- {
- long int *num;
- num = va_arg (args, long int *);
- *num = currlen;
- }
- else
- {
- int *num;
- num = va_arg (args, int *);
- *num = currlen;
- }
- break;
- case '%':
- total += dopr_outch (buffer, &currlen, maxlen, ch);
- break;
- case 'w':
- /* not supported yet, treat as next char */
- ch = *format++;
- break;
- default:
- /* Unknown, skip */
- break;
- }
- ch = *format++;
- state = DP_S_DEFAULT;
- flags = cflags = min = 0;
- max = -1;
- break;
- case DP_S_DONE:
- break;
- default:
- /* hmm? */
- break; /* some picky compilers need this */
- }
- }
- if (buffer != NULL)
- {
- if (currlen < maxlen - 1)
- buffer[currlen] = '\0';
- else
- buffer[maxlen - 1] = '\0';
- }
- return total;
-}
-
-static int fmtstr (char *buffer, size_t *currlen, size_t maxlen,
- char *value, int flags, int min, int max)
-{
- int padlen, strln; /* amount to pad */
- int cnt = 0;
- int total = 0;
-
- if (value == 0)
- {
- value = "<NULL>";
- }
-
- for (strln = 0; value[strln]; ++strln); /* strlen */
- if (max >= 0 && max < strln)
- strln = max;
- padlen = min - strln;
- if (padlen < 0)
- padlen = 0;
- if (flags & DP_F_MINUS)
- padlen = -padlen; /* Left Justify */
-
- while (padlen > 0)
- {
- total += dopr_outch (buffer, currlen, maxlen, ' ');
- --padlen;
- }
- while (*value && ((max < 0) || (cnt < max)))
- {
- total += dopr_outch (buffer, currlen, maxlen, *value++);
- ++cnt;
- }
- while (padlen < 0)
- {
- total += dopr_outch (buffer, currlen, maxlen, ' ');
- ++padlen;
- }
- return total;
-}
-
-/* Have to handle DP_F_NUM (ie 0x and 0 alternates) */
-
-static int fmtint (char *buffer, size_t *currlen, size_t maxlen,
- long value, int base, int min, int max, int flags)
-{
- int signvalue = 0;
- unsigned long uvalue;
- char convert[20];
- int place = 0;
- int spadlen = 0; /* amount to space pad */
- int zpadlen = 0; /* amount to zero pad */
- int caps = 0;
- int total = 0;
-
- if (max < 0)
- max = 0;
-
- uvalue = value;
-
- if(!(flags & DP_F_UNSIGNED))
- {
- if( value < 0 ) {
- signvalue = '-';
- uvalue = -value;
- }
- else
- if (flags & DP_F_PLUS) /* Do a sign (+/i) */
- signvalue = '+';
- else
- if (flags & DP_F_SPACE)
- signvalue = ' ';
- }
-
- if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */
-
- do {
- convert[place++] =
- (caps? "0123456789ABCDEF":"0123456789abcdef")
- [uvalue % (unsigned)base ];
- uvalue = (uvalue / (unsigned)base );
- } while(uvalue && (place < 20));
- if (place == 20) place--;
- convert[place] = 0;
-
- zpadlen = max - place;
- spadlen = min - MAX (max, place) - (signvalue ? 1 : 0);
- if (zpadlen < 0) zpadlen = 0;
- if (spadlen < 0) spadlen = 0;
- if (flags & DP_F_ZERO)
- {
- zpadlen = MAX(zpadlen, spadlen);
- spadlen = 0;
- }
- if (flags & DP_F_MINUS)
- spadlen = -spadlen; /* Left Justifty */
-
-#ifdef DEBUG_SNPRINTF
- dprint (1, (debugfile, "zpad: %d, spad: %d, min: %d, max: %d, place: %d\n",
- zpadlen, spadlen, min, max, place));
-#endif
-
- /* Spaces */
- while (spadlen > 0)
- {
- total += dopr_outch (buffer, currlen, maxlen, ' ');
- --spadlen;
- }
-
- /* Sign */
- if (signvalue)
- total += dopr_outch (buffer, currlen, maxlen, signvalue);
-
- /* Zeros */
- if (zpadlen > 0)
- {
- while (zpadlen > 0)
- {
- total += dopr_outch (buffer, currlen, maxlen, '0');
- --zpadlen;
- }
- }
-
- /* Digits */
- while (place > 0)
- total += dopr_outch (buffer, currlen, maxlen, convert[--place]);
-
- /* Left Justified spaces */
- while (spadlen < 0) {
- total += dopr_outch (buffer, currlen, maxlen, ' ');
- ++spadlen;
- }
-
- return total;
-}
-
-static LDOUBLE abs_val (LDOUBLE value)
-{
- LDOUBLE result = value;
-
- if (value < 0)
- result = -value;
-
- return result;
-}
-
-static LDOUBLE pow10 (int exp)
-{
- LDOUBLE result = 1;
-
- while (exp)
- {
- result *= 10;
- exp--;
- }
-
- return result;
-}
-
-static long round (LDOUBLE value)
-{
- long intpart;
-
- intpart = value;
- value = value - intpart;
- if (value >= 0.5)
- intpart++;
-
- return intpart;
-}
-
-static int fmtfp (char *buffer, size_t *currlen, size_t maxlen,
- LDOUBLE fvalue, int min, int max, int flags)
-{
- int signvalue = 0;
- LDOUBLE ufvalue;
- char iconvert[20];
- char fconvert[20];
- int iplace = 0;
- int fplace = 0;
- int padlen = 0; /* amount to pad */
- int zpadlen = 0;
- int caps = 0;
- int total = 0;
- long intpart;
- long fracpart;
-
- /*
- * AIX manpage says the default is 0, but Solaris says the default
- * is 6, and sprintf on AIX defaults to 6
- */
- if (max < 0)
- max = 6;
-
- ufvalue = abs_val (fvalue);
-
- if (fvalue < 0)
- signvalue = '-';
- else
- if (flags & DP_F_PLUS) /* Do a sign (+/i) */
- signvalue = '+';
- else
- if (flags & DP_F_SPACE)
- signvalue = ' ';
-
-#if 0
- if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */
-#endif
-
- intpart = ufvalue;
-
- /*
- * Sorry, we only support 9 digits past the decimal because of our
- * conversion method
- */
- if (max > 9)
- max = 9;
-
- /* We "cheat" by converting the fractional part to integer by
- * multiplying by a factor of 10
- */
- fracpart = round ((pow10 (max)) * (ufvalue - intpart));
-
- if (fracpart >= pow10 (max))
- {
- intpart++;
- fracpart -= pow10 (max);
- }
-
-#ifdef DEBUG_SNPRINTF
- dprint (1, (debugfile, "fmtfp: %f =? %d.%d\n", fvalue, intpart, fracpart));
-#endif
-
- /* Convert integer part */
- do {
- iconvert[iplace++] =
- (caps? "0123456789ABCDEF":"0123456789abcdef")[intpart % 10];
- intpart = (intpart / 10);
- } while(intpart && (iplace < 20));
- if (iplace == 20) iplace--;
- iconvert[iplace] = 0;
-
- /* Convert fractional part */
- do {
- fconvert[fplace++] =
- (caps? "0123456789ABCDEF":"0123456789abcdef")[fracpart % 10];
- fracpart = (fracpart / 10);
- } while(fracpart && (fplace < 20));
- if (fplace == 20) fplace--;
- fconvert[fplace] = 0;
-
- /* -1 for decimal point, another -1 if we are printing a sign */
- padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0);
- zpadlen = max - fplace;
- if (zpadlen < 0)
- zpadlen = 0;
- if (padlen < 0)
- padlen = 0;
- if (flags & DP_F_MINUS)
- padlen = -padlen; /* Left Justifty */
-
- if ((flags & DP_F_ZERO) && (padlen > 0))
- {
- if (signvalue)
- {
- total += dopr_outch (buffer, currlen, maxlen, signvalue);
- --padlen;
- signvalue = 0;
- }
- while (padlen > 0)
- {
- total += dopr_outch (buffer, currlen, maxlen, '0');
- --padlen;
- }
- }
- while (padlen > 0)
- {
- total += dopr_outch (buffer, currlen, maxlen, ' ');
- --padlen;
- }
- if (signvalue)
- total += dopr_outch (buffer, currlen, maxlen, signvalue);
-
- while (iplace > 0)
- total += dopr_outch (buffer, currlen, maxlen, iconvert[--iplace]);
-
- /*
- * Decimal point. This should probably use locale to find the correct
- * char to print out.
- */
- if (max > 0)
- {
- total += dopr_outch (buffer, currlen, maxlen, '.');
-
- while (fplace > 0)
- total += dopr_outch (buffer, currlen, maxlen, fconvert[--fplace]);
- }
-
- while (zpadlen > 0)
- {
- total += dopr_outch (buffer, currlen, maxlen, '0');
- --zpadlen;
- }
-
- while (padlen < 0)
- {
- total += dopr_outch (buffer, currlen, maxlen, ' ');
- ++padlen;
- }
-
- return total;
-}
-
-static int dopr_outch (char *buffer, size_t *currlen, size_t maxlen, char c)
-{
- if (*currlen + 1 < maxlen)
- buffer[(*currlen)++] = c;
- return 1;
-}
-
-#ifndef HAVE_VSNPRINTF
-int vsnprintf (char *str, size_t count, const char *fmt, va_list args)
-{
- if (str != NULL)
- str[0] = 0;
- return dopr(str, count, fmt, args);
-}
-#endif /* !HAVE_VSNPRINTF */
-
-#ifndef HAVE_SNPRINTF
-/* VARARGS3 */
-#ifdef HAVE_STDARGS
-int snprintf (char *str,size_t count,const char *fmt,...)
-#else
-int snprintf (va_alist) va_dcl
-#endif
-{
-#ifndef HAVE_STDARGS
- char *str;
- size_t count;
- char *fmt;
-#endif
- VA_LOCAL_DECL;
- int total;
-
- VA_START (fmt);
- VA_SHIFT (str, char *);
- VA_SHIFT (count, size_t );
- VA_SHIFT (fmt, char *);
- total = vsnprintf(str, count, fmt, ap);
- VA_END;
- return total;
-}
-#endif /* !HAVE_SNPRINTF */
-
-#ifdef TEST_SNPRINTF
-#ifndef LONG_STRING
-#define LONG_STRING 1024
-#endif
-int main (void)
-{
- char buf1[LONG_STRING];
- char buf2[LONG_STRING];
- char *fp_fmt[] = {
- "%-1.5f",
- "%1.5f",
- "%123.9f",
- "%10.5f",
- "% 10.5f",
- "%+22.9f",
- "%+4.9f",
- "%01.3f",
- "%4f",
- "%3.1f",
- "%3.2f",
- "%.0f",
- "%.1f",
- NULL
- };
- double fp_nums[] = { -1.5, 134.21, 91340.2, 341.1234, 0203.9, 0.96, 0.996,
- 0.9996, 1.996, 4.136, 0};
- char *int_fmt[] = {
- "%-1.5d",
- "%1.5d",
- "%123.9d",
- "%5.5d",
- "%10.5d",
- "% 10.5d",
- "%+22.33d",
- "%01.3d",
- "%4d",
- NULL
- };
- long int_nums[] = { -1, 134, 91340, 341, 0203, 0};
- int x, y;
- int fail = 0;
- int num = 0;
-
- printf ("Testing snprintf format codes against system sprintf...\n");
-
- for (x = 0; fp_fmt[x] != NULL ; x++)
- for (y = 0; fp_nums[y] != 0 ; y++)
- {
- snprintf (buf1, sizeof (buf1), fp_fmt[x], fp_nums[y]);
- sprintf (buf2, fp_fmt[x], fp_nums[y]);
- if (strcmp (buf1, buf2))
- {
- printf("snprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf = %s\n",
- fp_fmt[x], buf1, buf2);
- fail++;
- }
- num++;
- }
-
- for (x = 0; int_fmt[x] != NULL ; x++)
- for (y = 0; int_nums[y] != 0 ; y++)
- {
- snprintf (buf1, sizeof (buf1), int_fmt[x], int_nums[y]);
- sprintf (buf2, int_fmt[x], int_nums[y]);
- if (strcmp (buf1, buf2))
- {
- printf("snprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf = %s\n",
- int_fmt[x], buf1, buf2);
- fail++;
- }
- num++;
- }
- printf ("%d tests failed out of %d.\n", fail, num);
-}
-#endif /* SNPRINTF_TEST */
-
-#endif /* !HAVE_SNPRINTF */
-
diff --git a/util/test/Makefile b/util/test/Makefile
deleted file mode 100644
index f7cc936..0000000
--- a/util/test/Makefile
+++ /dev/null
@@ -1,93 +0,0 @@
-
-
-ifeq ($(NEOTONIC_ROOT),)
-NEOTONIC_ROOT = ../../
-endif
-
-include $(NEOTONIC_ROOT)rules.mk
-
-HDFTEST_EXE = hdftest
-HDFTEST_SRC = hdftest.c
-HDFTEST_OBJ = $(HDFTEST_SRC:%.c=%.o)
-
-HDFSORTTEST_EXE = hdf_sort_test
-HDFSORTTEST_SRC = hdf_sort_test.c
-HDFSORTTEST_OBJ = $(HDFSORTTEST_SRC:%.c=%.o)
-
-HDFLOADTEST_EXE = hdfloadtest
-HDFLOADTEST_SRC = hdfloadtest.c
-HDFLOADTEST_OBJ = $(HDFLOADTEST_SRC:%.c=%.o)
-
-LISTDIRTEST_EXE = listdir_test
-LISTDIRTEST_SRC = listdir_test.c
-LISTDIRTEST_OBJ = $(LISTDIRTEST_SRC:%.c=%.o)
-
-HDFCOPYTEST_EXE = hdf_copy_test
-HDFCOPYTEST_SRC = hdf_copy_test.c
-HDFCOPYTEST_OBJ = $(HDFCOPYTEST_SRC:%.c=%.o)
-
-HDFDEALLOCTEST_EXE = hdf_dealloc_test
-HDFDEALLOCTEST_SRC = hdf_dealloc_test.c
-HDFDEALLOCTEST_OBJ = $(HDFDEALLOCTEST_SRC:%.c=%.o)
-
-NETTEST_EXE = net_test
-NETTEST_SRC = net_test.c
-NETTEST_OBJ = $(NETTEST_SRC:%.c=%.o)
-
-DATETEST_EXE = date_test
-DATETEST_SRC = date_test.c
-DATETEST_OBJ = $(DATETEST_SRC:%.c=%.o)
-
-HASHTEST_EXE = hash_test
-HASHTEST_SRC = hash_test.c
-HASHTEST_OBJ = $(HASHTEST_SRC:%.c=%.o)
-
-ULISTTEST_EXE = ulist_test
-ULISTTEST_SRC = ulist_test.c
-ULISTTEST_OBJ = $(ULISTTEST_SRC:%.c=%.o)
-
-CFLAGS += -I$(NEOTONIC_ROOT)/util
-LIBS += -lneo_utl
-
-TARGETS = $(HDFTEST_EXE) $(LISTDIRTEST_EXE) $(HDFCOPYTEST_EXE) \
- $(HDFSORTTEST_EXE) $(HDFDEALLOCTEST_EXE) \
- $(HDFLOADTEST_EXE) $(NETTEST_EXE) $(DATETEST_EXE) \
- $(HASHTEST_EXE) $(ULISTTEST_EXE)
-
-all: $(TARGETS)
-
-$(ULISTTEST_EXE): $(ULISTTEST_OBJ) $(NTR_LIB)
- $(LD) $@ $(ULISTTEST_OBJ) $(LDFLAGS) $(LIBS)
-
-$(HDFTEST_EXE): $(HDFTEST_OBJ) $(NTR_LIB)
- $(LD) $@ $(HDFTEST_OBJ) $(LDFLAGS) $(LIBS)
-
-$(HDFSORTTEST_EXE): $(HDFSORTTEST_OBJ) $(NTR_LIB)
- $(LD) $@ $(HDFSORTTEST_OBJ) $(LDFLAGS) $(LIBS)
-
-$(HDFDEALLOCTEST_EXE): $(HDFDEALLOCTEST_OBJ) $(NTR_LIB)
- $(LD) $@ $(HDFDEALLOCTEST_OBJ) $(LDFLAGS) $(LIBS)
-
-$(HDFLOADTEST_EXE): $(HDFLOADTEST_OBJ) $(NTR_LIB)
- $(LD) $@ $(HDFLOADTEST_OBJ) $(LDFLAGS) $(LIBS) # -lefence
-
-$(LISTDIRTEST_EXE): $(LISTDIRTEST_OBJ) $(NTR_LIB)
- $(LD) $@ $(LISTDIRTEST_OBJ) $(LDFLAGS) $(LIBS)
-
-$(HDFCOPYTEST_EXE): $(HDFCOPYTEST_OBJ) $(NTR_LIB)
- $(LD) $@ $(HDFCOPYTEST_OBJ) $(LDFLAGS) $(LIBS) # -lefence
-
-$(NETTEST_EXE): $(NETTEST_OBJ) $(NTR_LIB)
- $(LD) $@ $(NETTEST_OBJ) $(LDFLAGS) $(LIBS)
-
-$(DATETEST_EXE): $(DATETEST_OBJ) $(NTR_LIB)
- $(LD) $@ $(DATETEST_OBJ) $(LDFLAGS) $(LIBS)
-
-$(HASHTEST_EXE): $(HASHTEST_OBJ) $(NTR_LIB)
- $(LD) $@ $(HASHTEST_OBJ) $(LDFLAGS) $(LIBS) # -lefence
-
-clean:
- $(RM) *.o
-
-distclean:
- $(RM) $(TARGETS) *.o
diff --git a/util/test/date_test.c b/util/test/date_test.c
deleted file mode 100644
index 92ca2f0..0000000
--- a/util/test/date_test.c
+++ /dev/null
@@ -1,45 +0,0 @@
-
-#include "cs_config.h"
-
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "util/neo_misc.h"
-#include "util/neo_err.h"
-#include "util/neo_date.h"
-
-int main(int argc, char *argv[])
-{
- time_t t;
- struct tm ttm;
- char buf[256];
-
- fprintf(stderr, "Starting...\n");
- fprintf(stderr, "TZ is %s\n", getenv("TZ"));
- fprintf(stderr, "TZ Offset is %ld\n", timezone);
-
- memset(&ttm, 0, sizeof(struct tm));
- t = 996887354;
- fprintf(stderr, "US/Eastern Test\n");
- neo_time_expand(t, "US/Eastern", &ttm);
-
- fprintf(stderr, "TZ is %s\n", getenv("TZ"));
- fprintf(stderr, "TZ Offset is %ld\n", timezone);
- fprintf(stderr, "TZ Offset is %ld\n", neo_tz_offset(&ttm));
- fprintf(stderr, "From tm: %s %ld\n", ttm.tm_zone, ttm.tm_gmtoff);
- strftime(buf, sizeof(buf), "%Y/%m/%d %H:%M:%S", &ttm);
- fprintf(stderr, "Time is %s\n", buf);
-
- fprintf(stderr, "GMT Test\n");
- neo_time_expand(t, "GMT", &ttm);
-
- fprintf(stderr, "TZ is %s\n", getenv("TZ"));
- fprintf(stderr, "TZ Offset is %ld\n", timezone);
- fprintf(stderr, "TZ Offset is %ld\n", neo_tz_offset(&ttm));
- fprintf(stderr, "From tm: %s %ld\n", ttm.tm_zone, ttm.tm_gmtoff);
- strftime(buf, sizeof(buf), "%Y/%m/%d %H:%M:%S", &ttm);
- fprintf(stderr, "Time is %s\n", buf);
-
- return 0;
-}
diff --git a/util/test/hash_test.c b/util/test/hash_test.c
deleted file mode 100644
index 31d3378..0000000
--- a/util/test/hash_test.c
+++ /dev/null
@@ -1,118 +0,0 @@
-
-#include "cs_config.h"
-#include <unistd.h>
-#include <string.h>
-#include "util/neo_misc.h"
-#include "util/neo_err.h"
-#include "util/neo_hash.h"
-
-void dump_string_hash(NE_HASH *hash)
-{
- NE_HASHNODE *node;
- int x;
-
- for (x = 0; x < hash->size; x++)
- {
- ne_warn("Node %d", x);
- for (node = hash->nodes[x]; node; node = node->next)
- {
- ne_warn(" %s = %s [%8x | %d]", node->key, node->value, node->hashv, node->hashv & (hash->size - 1));
- }
- }
-}
-
-NEOERR *dictionary_test (void)
-{
- NEOERR *err = STATUS_OK;
- int x;
- char *word;
- NE_HASH *hash = NULL;
- FILE *fp;
- char buf[256];
-
- err = ne_hash_init(&hash, ne_hash_str_hash, ne_hash_str_comp);
- if (err)
- return nerr_pass(err);
-
- fp = fopen ("/usr/dict/words", "r");
- if (fp == NULL) {
- fp = fopen ("/usr/share/dict/words", "r");
- if (fp == NULL)
- return nerr_raise_errno(NERR_IO, "Unable to open file /usr/dict/words");
- }
-
- ne_warn("Loading words into hash");
- while (fgets (buf, sizeof(buf), fp) != NULL)
- {
- x = strlen (buf);
- if (buf[x-1] == '\n')
- buf[x-1] = '\0';
-
- word = strdup(buf);
- err = ne_hash_insert(hash, word, word);
- if (err) break;
- word = ne_hash_lookup(hash, buf);
- if (word == NULL)
- {
- err = nerr_raise(NERR_ASSERT, "Unable to find word %s in hash", buf);
- break;
- }
- if (strcmp(word, buf))
- {
- err = nerr_raise(NERR_ASSERT, "Lookup returned wrong word: %s != %s", buf, word);
- break;
- }
- }
- fclose (fp);
- ne_warn("Loaded %d words", hash->num);
- if (err)
- {
- dump_string_hash(hash);
- return nerr_pass(err);
- }
-
- fp = fopen ("/usr/dict/words", "r");
- if (fp == NULL) {
- fp = fopen ("/usr/share/dict/words", "r");
- if (fp == NULL)
- return nerr_raise_errno(NERR_IO, "Unable to open file /usr/dict/words");
- }
-
- ne_warn("Testing words in hash");
- while (fgets (buf, sizeof(buf), fp) != NULL)
- {
- x = strlen (buf);
- if (buf[x-1] == '\n')
- buf[x-1] = '\0';
-
- if (!(word = ne_hash_lookup(hash, buf)))
- {
- err = nerr_raise(NERR_ASSERT, "Unable to find word %s in hash", buf);
- break;
- }
- if (strcmp(word, buf))
- {
- err = nerr_raise(NERR_ASSERT, "Lookup returned wrong word: %s != %s", buf, word);
- break;
- }
- }
- fclose (fp);
- ne_hash_destroy(&hash);
-
- return nerr_pass(err);
-}
-
-int main(int argc, char **argv)
-{
- NEOERR *err;
-
- err = dictionary_test();
- if (err)
- {
- nerr_log_error(err);
- printf("FAIL\n");
- return -1;
- }
- printf("PASS\n");
- return 0;
-}
diff --git a/util/test/hdf_copy_test.c b/util/test/hdf_copy_test.c
deleted file mode 100644
index b56788b..0000000
--- a/util/test/hdf_copy_test.c
+++ /dev/null
@@ -1,50 +0,0 @@
-
-#include "cs_config.h"
-
-#include <stdio.h>
-#include <string.h>
-
-#include "util/neo_misc.h"
-#include "util/neo_hdf.h"
-
-int main(void) {
- HDF *hdf_1, *hdf_2;
- HDF *cur_node,*last_node;
-
- hdf_init(&hdf_1);
-
- hdf_read_file(hdf_1,"hdf_copy_test.hdf");
- hdf_dump(hdf_1,NULL);
-
- cur_node = hdf_get_obj(hdf_1,"Chart");
- last_node = cur_node;
-
- cur_node = hdf_get_obj(cur_node,"next_stage");
- while (hdf_get_obj(cur_node,"next_stage") && strcmp(hdf_get_value(cur_node,"Bucket.FieldId",""),"QUEUE")) {
- last_node = cur_node;
- cur_node = hdf_get_obj(cur_node,"next_stage");
- }
-
- if (hdf_get_obj(cur_node,"next_stage")) {
- hdf_copy(hdf_1,"TempHolderPlace",hdf_get_obj(cur_node,"next_stage"));
- }
- ne_warn("Delete tree from node: %s", hdf_obj_name(last_node));
- hdf_remove_tree(last_node,"next_stage");
-
- hdf_dump(hdf_1,NULL);
- fprintf(stderr,"-----------------\n");
-
-
- hdf_copy(last_node,"next_stage",hdf_get_obj(hdf_1,"TempHolderPlace"));
- hdf_dump(hdf_1,NULL);
-
- /* Test copy and destroy, make sure we actually copy everything and
- * don't reference anything */
- hdf_init(&hdf_2);
- hdf_copy(hdf_2, "", hdf_1);
- hdf_destroy(&hdf_1);
- hdf_dump(hdf_2, NULL);
- hdf_destroy(&hdf_2);
-
- return 0;
-}
diff --git a/util/test/hdf_copy_test.hdf b/util/test/hdf_copy_test.hdf
deleted file mode 100644
index e6e3f24..0000000
--- a/util/test/hdf_copy_test.hdf
+++ /dev/null
@@ -1,50 +0,0 @@
-
-# --------------------------------------------------
-# this is an example definition of a chart pipeline
-#
-
-
-DataSource = outfile.sdb
-DataSource {
-# TODO: specify time range for the dataset....
-}
-
-DomainData {
-# TODO: include data values for agents, queues, etc.
-}
-
-Filters {
-# TODO: configure filters to limit data
-}
-
-Chart {
- next_stage {
- id [attr=1, batter] = 1
- Type = Mux
- Bucket = Discrete
- Bucket.FieldId = QUEUE
- Bucket.Dimension = Y
-
- next_stage {
- id [attr=2, batter] = 2
- Type = Mux
- Bucket = Time
- Bucket.FieldId = TIME
- Bucket.Dimension = Y
-
- next_stage {
- id [attr=3] = 3
- Type = Mux
- Bucket = Discrete
- Bucket.FieldId = AGENT
- Bucket.Dimension = X
-
- next_stage {
- id = 4
- Type = Accumulator
- }
- }
- }
-
- }
-}
diff --git a/util/test/hdf_dealloc_test.c b/util/test/hdf_dealloc_test.c
deleted file mode 100644
index 630db13..0000000
--- a/util/test/hdf_dealloc_test.c
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-#include "cs_config.h"
-#include <unistd.h>
-#include "util/neo_misc.h"
-#include "util/neo_hdf.h"
-#include "util/neo_rand.h"
-
-int main(int argc, char *argv[])
-{
- HDF *hdf = NULL;
- int i, j;
-
- hdf_init(&hdf);
-
- ne_warn("creating 100000x10 nodes");
- for (i = 0; i < 100000; i++) {
- char buffer[64];
- for (j = 0; j < 10; j++) {
- snprintf(buffer, sizeof(buffer), "node.%d.test.%d", i, j);
- hdf_set_value(hdf, buffer, "test");
- }
- }
-
- ne_warn("calling dealloc");
- hdf_destroy(&hdf); // <-- this takes forever to return with a hugely
- return 0;
-}
diff --git a/util/test/hdf_hash_test.c b/util/test/hdf_hash_test.c
deleted file mode 100644
index 7ebdd68..0000000
--- a/util/test/hdf_hash_test.c
+++ /dev/null
@@ -1,42 +0,0 @@
-
-#include "cs_config.h"
-#include <unistd.h>
-#include "util/neo_misc.h"
-#include "util/neo_hdf.h"
-#include "util/neo_rand.h"
-
-int main(int argc, char *argv[])
-{
- NEOERR *err;
- HDF *hdf, *h2;
-
-
- err = hdf_init(&hdf);
- if (err != STATUS_OK)
- {
- nerr_log_error(err);
- return -1;
- }
-
- err = hdf_set_value(hdf, "CGI.Foo", "Bar");
- if (err)
- {
- nerr_log_error(err);
- return -1;
- }
- err = hdf_set_value(hdf, "CGI.Foo", "Baz");
- if (err)
- {
- nerr_log_error(err);
- return -1;
- }
-
- h2 = hdf_get_obj(hdf, "CGI");
- err = hdf_set_value(h2, "Foo", "Bang");
-
- hdf_dump(hdf, NULL);
-
- hdf_destroy(&hdf);
-
- return 0;
-}
diff --git a/util/test/hdf_sort_test.c b/util/test/hdf_sort_test.c
deleted file mode 100644
index 5747dd3..0000000
--- a/util/test/hdf_sort_test.c
+++ /dev/null
@@ -1,70 +0,0 @@
-
-#include "cs_config.h"
-#include <unistd.h>
-#include <string.h>
-#include "util/neo_misc.h"
-#include "util/neo_hdf.h"
-#include "util/neo_rand.h"
-
-int TestCompare(const void* pa, const void* pb)
-{
- HDF **a = (HDF **)pa;
- HDF **b = (HDF **)pb;
- float aVal,bVal;
-
- aVal = atof(hdf_get_value(*a,"val","0"));
- bVal = atof(hdf_get_value(*b,"val","0"));
-
- printf("TestCompare aVal=%f [%s] bVal=%f [%s]\n",aVal,hdf_get_value(*a,"name","?"),bVal,hdf_get_value(*b,"name","?"));
-
- if (aVal<bVal) return -1;
- if (aVal==bVal) return 0;
- return 1;
-}
-
-void TestSort(HDF* hdf)
-{
- int i;
- float value;
-
- for (i=0;i<15;i++)
- {
- value = rand()/(RAND_MAX+1.0);
-
- hdf_set_valuef(hdf, "test.%d", "%d", i, i);
- hdf_set_valuef(hdf, "test.%d.name", "item #%d", i, i);
- hdf_set_valuef(hdf, "test.%d.val", "%f", i, value );
- }
-
- hdf_dump(hdf,NULL);
-
- hdf_sort_obj(hdf_get_obj(hdf, "test"), TestCompare);
-
- hdf_dump(hdf,NULL);
-
-}
-
-
-int main(int argc, char *argv[])
-{
- NEOERR *err;
- HDF *hdf;
- double tstart = 0;
-
- err = hdf_init(&hdf);
- if (err != STATUS_OK)
- {
- nerr_log_error(err);
- return -1;
- }
-
- tstart = ne_timef();
- TestSort(hdf);
- ne_warn("sort took %5.5fs", ne_timef() - tstart);
-
- hdf_dump(hdf, NULL);
-
- hdf_destroy(&hdf);
-
- return 0;
-}
diff --git a/util/test/hdfloadtest.c b/util/test/hdfloadtest.c
deleted file mode 100644
index 8042f79..0000000
--- a/util/test/hdfloadtest.c
+++ /dev/null
@@ -1,95 +0,0 @@
-
-#include "cs_config.h"
-#include <unistd.h>
-#include "util/neo_misc.h"
-#include "util/neo_hdf.h"
-#include "util/neo_rand.h"
-#include "util/neo_files.h"
-
-int main(int argc, char *argv[])
-{
- NEOERR *err;
- HDF *hdf;
- int x;
- double tstart = 0;
- double tend = 0;
- char *file;
- int reps = 1000;
- char *s = NULL;
-
- if (argc > 1)
- file = argv[1];
- else
- file = "test.hdf";
-
- if (argc > 2)
- reps = atoi(argv[2]);
-
- err = hdf_init(&hdf);
- if (err != STATUS_OK)
- {
- nerr_log_error(err);
- return -1;
- }
-
- tstart = ne_timef();
-
- for (x = 0; x < reps; x++)
- {
- err = hdf_read_file(hdf, file);
- if (err != STATUS_OK)
- {
- nerr_log_error(err);
- return -1;
- }
- }
- tend = ne_timef();
- ne_warn("hdf_read_file test finished in %5.3fs, %5.3fs/rep", tend - tstart, (tend-tstart) / reps);
-
- tstart = ne_timef();
-
- for (x = 0; x < reps; x++)
- {
- err = ne_load_file(file, &s);
- if (err != STATUS_OK)
- {
- nerr_log_error(err);
- return -1;
- }
- err = hdf_read_string(hdf, s);
- if (err != STATUS_OK)
- {
- nerr_log_error(err);
- return -1;
- }
- free(s);
- }
- tend = ne_timef();
- ne_warn("load/hdf_read_string test finished in %5.3fs, %5.3fs/rep", tend - tstart, (tend-tstart) / reps);
-
-
- err = ne_load_file(file, &s);
- if (err != STATUS_OK)
- {
- nerr_log_error(err);
- return -1;
- }
- tstart = ne_timef();
- for (x = 0; x < reps; x++)
- {
- err = hdf_read_string(hdf, s);
- if (err != STATUS_OK)
- {
- nerr_log_error(err);
- return -1;
- }
- }
- tend = ne_timef();
- free(s);
- ne_warn("hdf_read_string test finished in %5.3fs, %5.3fs/rep", tend - tstart, (tend-tstart) / reps);
- /* hdf_dump(hdf, NULL); */
-
- hdf_destroy(&hdf);
-
- return 0;
-}
diff --git a/util/test/hdftest.c b/util/test/hdftest.c
deleted file mode 100644
index 6ff59b3..0000000
--- a/util/test/hdftest.c
+++ /dev/null
@@ -1,147 +0,0 @@
-
-#include "cs_config.h"
-#include <unistd.h>
-#include <string.h>
-#include "util/neo_misc.h"
-#include "util/neo_hdf.h"
-#include "util/neo_rand.h"
-
-#define DIE_NOT_OK(err) \
- if (err != STATUS_OK) { \
- nerr_log_error(err); \
- exit(-1); \
- }
-
-
-int rand_name (char *s, int slen)
-{
- char buf[256];
- int x, m, l, rl;
-
- m = neo_rand(10);
- while (1) {
- neo_rand_word(s, slen);
- if (!strchr(s, '.')) break;
- }
-
- for (x = 1; x < m; x++)
- {
- l = strlen(s);
- neo_rand_word(buf, sizeof(buf));
- rl = strlen(buf);
- /* fprintf(stderr, "%s\n", buf); */
- if (rl && slen - l - rl > 1 && !strchr(buf, '.')) {
- snprintf(s + l, slen - l, ".%s", buf);
- }
- }
-
- return 0;
-}
-
-static int sortByName(const void *a, const void *b) {
- HDF **ha = (HDF **)a;
- HDF **hb = (HDF **)b;
-
- /* fprintf(stderr, "%s <=> %s\n", hdf_obj_name(*ha), hdf_obj_name(*hb)); */
- return strcasecmp(hdf_obj_name(*ha), hdf_obj_name(*hb));
-}
-
-
-int main(int argc, char *argv[])
-{
- NEOERR *err;
- HDF *hdf;
- int x;
- char name[256];
- char value[256];
- double tstart = 0;
-
- err = hdf_init(&hdf);
- DIE_NOT_OK(err);
-
- err = hdf_set_value (hdf, "Beware", "1");
- DIE_NOT_OK(err);
- err = hdf_set_value (hdf, "Beware.The", "2");
- DIE_NOT_OK(err);
- err = hdf_set_valuef (hdf, "Beware.The.%s=%d", "Ides", 3);
- DIE_NOT_OK(err);
- err = hdf_set_value (hdf, "Beware.Off", "4");
- DIE_NOT_OK(err);
- err = hdf_set_value (hdf, "Beware.The.Ides.Of", "5");
- DIE_NOT_OK(err);
- err = hdf_set_value (hdf, "Beware.The.Butter", "6");
- DIE_NOT_OK(err);
- err = hdf_set_attr (hdf, "Beware.The.Butter", "Lang", "en");
- DIE_NOT_OK(err);
- err = hdf_set_attr (hdf, "Beware.The.Butter", "Lang", "1");
- DIE_NOT_OK(err);
- err = hdf_set_attr (hdf, "Beware.The.Butter", "Lang", NULL);
- DIE_NOT_OK(err);
-
- err = hdf_read_file (hdf, "test.hdf");
- DIE_NOT_OK(err);
- hdf_dump(hdf, NULL);
-
-
- x = hdf_get_int_value (hdf, "Beware.The.Ides", 0);
- if (x != 3)
- {
- ne_warn("hdf_get_int_value returned %d, expected 3", x);
- return -1;
- }
-
- /* test symlinks */
- {
- const char *v;
- err = hdf_set_value(hdf, "Destination.Foo", "bar");
- DIE_NOT_OK(err);
- err = hdf_set_symlink(hdf, "Symlink.baz", "Destination.Foo");
- DIE_NOT_OK(err);
- v = hdf_get_value(hdf, "Symlink.baz", "notfound");
- if (strcmp(v, "bar")) {
- ne_warn("hdf_get_value through symlink returned %s, expected bar", v);
- return -1;
- }
- err = hdf_set_value(hdf, "Symlink.baz", "newvalue");
- DIE_NOT_OK(err);
- v = hdf_get_value(hdf, "Symlink.baz", "notfound");
- if (strcmp(v, "newvalue")) {
- ne_warn("hdf_get_value through symlink returned %s, expected newvalue",
- v);
- return -1;
- }
- err = hdf_set_value(hdf, "Symlink.baz.too", "newtoo");
- DIE_NOT_OK(err);
- v = hdf_get_value(hdf, "Symlink.baz.too", "newtoo");
- if (strcmp(v, "newtoo")) {
- ne_warn("hdf_get_value through symlink returned %s, expected newtoo",
- v);
- return -1;
- }
- v = hdf_get_value(hdf, "Destination.Foo.too", "newtoo");
- if (strcmp(v, "newtoo")) {
- ne_warn("hdf_get_value through symlink returned %s, expected newtoo",
- v);
- return -1;
- }
- }
-
- for (x = 0; x < 10000; x++)
- {
- rand_name(name, sizeof(name));
- neo_rand_word(value, sizeof(value));
- /* ne_warn("Setting %s = %s", name, value); */
- err = hdf_set_value (hdf, name, value);
- DIE_NOT_OK(err);
- }
-
- tstart = ne_timef();
- hdf_sort_obj(hdf, sortByName);
- ne_warn("sort took %5.5fs", ne_timef() - tstart);
-
- hdf_dump(hdf, NULL);
-
- hdf_destroy(&hdf);
-
- return 0;
-}
diff --git a/util/test/listdir_test.c b/util/test/listdir_test.c
deleted file mode 100644
index 91ad424..0000000
--- a/util/test/listdir_test.c
+++ /dev/null
@@ -1,54 +0,0 @@
-
-#include "cs_config.h"
-#include <stdio.h>
-#include "util/neo_misc.h"
-#include "util/neo_err.h"
-#include "util/ulist.h"
-#include "util/neo_files.h"
-
-int main(int argc, char **argv)
-{
- char *path;
- ULIST *files = NULL;
- char *filename;
- NEOERR *err;
- int x;
-
- if (argc > 1)
- path = argv[1];
- else
- path = ".";
-
- ne_warn("Testing ne_listdir()");
- err = ne_listdir(path, &files);
- if (err)
- {
- nerr_log_error(err);
- return -1;
- }
-
- for (x = 0; x < uListLength(files); x++)
- {
- err = uListGet(files, x, (void *)&filename);
- printf("%s\n", filename);
- }
-
- uListDestroy(&files, ULIST_FREE);
-
- ne_warn("Testing ne_listdir_match() with *.c");
- err = ne_listdir_match(path, &files, "*.c");
- if (err)
- {
- nerr_log_error(err);
- return -1;
- }
-
- for (x = 0; x < uListLength(files); x++)
- {
- err = uListGet(files, x, (void *)&filename);
- printf("%s\n", filename);
- }
-
- uListDestroy(&files, ULIST_FREE);
- return 0;
-}
diff --git a/util/test/net_test.c b/util/test/net_test.c
deleted file mode 100644
index 5af94f0..0000000
--- a/util/test/net_test.c
+++ /dev/null
@@ -1,185 +0,0 @@
-
-#include "cs_config.h"
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/wait.h>
-
-#include "util/neo_misc.h"
-#include "util/neo_err.h"
-#include "util/neo_net.h"
-#include "util/ulist.h"
-#include "util/neo_rand.h"
-
-#define TEST_PORT 46032
-#define COUNT 10000
-
-typedef struct _rand_thing {
- int is_num;
- int n;
- char *s;
-} RAND_THING;
-
-
-NEOERR *client_proc(int port, ULIST *stuff)
-{
- NEOERR *err;
- NSOCK *nsock;
- int x;
- RAND_THING *thing;
-
- sleep(1);
- ne_warn("[c] Connecting to port %d", port);
- err = ne_net_connect(&nsock, "localhost", port, 10, 10);
- if (err) return nerr_pass(err);
-
- ne_warn("[c] Connected.");
-
- do
- {
- err = ne_net_write_int(nsock, uListLength(stuff));
- if (err) break;
-
- for (x = 0; x < uListLength(stuff); x++)
- {
- err = uListGet(stuff, x, (void *)&thing);
- if (err) break;
- if (thing->is_num)
- {
- err = ne_net_write_int(nsock, thing->n);
- /* ne_warn("[c] Sending %d", thing->n); */
- }
- else
- {
- err = ne_net_write_str(nsock, thing->s);
- /* ne_warn("[c] Sending %s", thing->s); */
- }
- if (err) break;
- }
- } while (0);
-
- ne_net_close(&nsock);
- return nerr_pass(err);
-}
-
-NEOERR *server_proc(int port, ULIST *stuff)
-{
- NEOERR *err;
- int server;
- NSOCK *nsock;
- int x, i;
- RAND_THING *thing;
- char *s;
-
- ne_warn("[s] Listening on port %d", port);
- err = ne_net_listen(port, &server);
- if (err) return nerr_pass(err);
-
- err = ne_net_accept(&nsock, server, 10);
- if (err) return nerr_pass(err);
-
- ne_warn("[s] Connection.");
-
- do {
- err = ne_net_read_int(nsock, &x);
- if (err) break;
-
- if (x != uListLength(stuff))
- {
- err = nerr_raise(NERR_ASSERT, "Incoming length is not equal to expected length: %d != %d", x, uListLength(stuff));
- break;
- }
-
- for (x = 0; x < uListLength(stuff); x++)
- {
- err = uListGet(stuff, x, (void *)&thing);
- if (err) break;
- if (thing->is_num)
- {
- err = ne_net_read_int(nsock, &i);
- if (err) break;
- /* ne_warn("[s] Received %d", i); */
- if (thing->n != i)
- {
- err = nerr_raise(NERR_ASSERT, "Incoming %d number is not equal to expected: %d != %d", x, i, thing->n);
- break;
- }
- }
- else
- {
- err = ne_net_read_str_alloc(nsock, &s, NULL);
- if (err) break;
- /* ne_warn("[s] Received %s", s); */
- if (strcmp(s, thing->s))
- {
- err = nerr_raise(NERR_ASSERT, "Incoming %d string is not equal to expected: '%s' != '%s'", x, s, thing->s);
- break;
- }
- free(s);
- }
- printf("\rs");
- }
- } while (0);
- ne_net_close(&nsock);
-
- return nerr_pass(err);
-}
-
-NEOERR *run_test(void)
-{
- NEOERR *err;
- ULIST *stuff;
- char word[64000];
- RAND_THING *thing;
- pid_t child;
- int x;
-
- ne_warn("starting net_test");
- ne_warn("generating random list");
-
- err = uListInit(&stuff, COUNT, 0);
- if (err) return nerr_pass(err);
- for (x = 0; x < COUNT; x++)
- {
- thing = (RAND_THING *) calloc(1, sizeof(RAND_THING));
- if (neo_rand(100) > 50)
- {
- thing->is_num = 1;
- thing->n = neo_rand(1000000);
- }
- else
- {
- neo_rand_word(word, sizeof(word));
- thing->s = strdup(word);
- }
- err = uListAppend(stuff, thing);
- if (err) return nerr_pass(err);
- }
-
- child = fork();
- if (!child)
- {
- /* child */
- return nerr_pass(client_proc(TEST_PORT, stuff));
- }
- /* parent */
- err = server_proc(TEST_PORT, stuff);
-
- if (!err) waitpid(child, NULL, 0);
- return nerr_pass(err);
-}
-
-int main(int argc, char **argv)
-{
- NEOERR *err;
-
- nerr_init();
- err = run_test();
- if (err)
- {
- nerr_log_error(err);
- return -1;
- }
- return 0;
-}
diff --git a/util/test/test.hdf b/util/test/test.hdf
deleted file mode 100644
index 8d84d0d..0000000
--- a/util/test/test.hdf
+++ /dev/null
@@ -1,23 +0,0 @@
-#This is a test
-# file for our hdf loader
-
-Test.Wow = Foo
-Test.Foo : Test.Wow
-
-Test.Embedded {
- Foo = Bar
- Bar {
- Baz [Lang] = Boom
- }
- Bar [Lang=en] = Barn
- bar [tag="help me"]= Door
- Bar2 {
- Born = Again
- }
- Attr1 [tag="baseball",fielder=catcher,basehit] = 1
- Attr2 [tag="baseball", fielder=catcher,basehit] = 1
- Attr3 [tag="baseball",fielder=catcher, basehit] = 1
- Attr4 [tag="baseball", fielder=catcher, basehit] = 1
-}
-
-#include "test2.hdf"
diff --git a/util/test/test2.hdf b/util/test/test2.hdf
deleted file mode 100644
index ef3fc09..0000000
--- a/util/test/test2.hdf
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-Multiline.Test << EOB
- This is a test of the multiline setting code....
-
-Wow!
-EOB
diff --git a/util/test/ulist_test.c b/util/test/ulist_test.c
deleted file mode 100644
index 3ee925a..0000000
--- a/util/test/ulist_test.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-/*
- * Tests for ulist library
- */
-
-#include "util/neo_misc.h"
-#include "util/neo_err.h"
-#include "util/ulist.h"
-
-NEOERR *TestIntegerStorage() {
- NEOERR *err;
- ULIST *arr;
- int x;
-
- // Simple append test
- err = uListInit(&arr, 100, 0);
- if (err) return nerr_pass(err);
- for (x = 0; x < 1000; x++) {
- err = uListAppend(arr, (void *)x);
- if (err) return nerr_pass(err);
- }
-
- for (x = 0; x < 1000; x++) {
- int y;
-
- err = uListGet(arr, x, (void *)&y);
- if (err) return nerr_pass(err);
- if (x != y) {
- return nerr_raise(NERR_ASSERT,
- "Value returned didn't match value stored: Got %d, Expected %d",
- y, x);
- }
- }
-
- return STATUS_OK;
-}
-
-
-int main(int argc, char *argv[]) {
- NEOERR *err;
-
- nerr_init();
-
- err = TestIntegerStorage();
- if (err) {
- nerr_log_error(err);
- printf("FAIL\n");
- return -1;
- }
- printf("PASS\n");
- return 0;
-}
diff --git a/util/ulist.c b/util/ulist.c
deleted file mode 100644
index 4604f9c..0000000
--- a/util/ulist.c
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#include "cs_config.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#include "neo_misc.h"
-#include "neo_err.h"
-#include "ulist.h"
-
-#define ULIST_DEFAULT_SIZE 10
-
-static NEOERR *check_resize (ULIST *ul, int size)
-{
- if (size > ul->max)
- {
- void **new_items;
- int new_size = 0;
-
- new_size = ul->max*2;
- if (size > new_size)
- {
- new_size = size + ul->max;
- }
-
- new_items = (void **) realloc ((void *)(ul->items), new_size * sizeof(void *));
- if (new_items == NULL)
- {
- return nerr_raise(NERR_NOMEM,
- "Unable to resize ULIST to %d: Out of memory", new_size);
- }
- ul->items = new_items;
- ul->max = new_size;
- }
-
- return STATUS_OK;
-}
-
-
-NEOERR *uListInit(ULIST **ul, int size, int flags)
-{
- ULIST *r_ul;
-
- *ul = NULL;
- if (size == 0)
- {
- size = ULIST_DEFAULT_SIZE;
- }
-
- r_ul = (ULIST *) calloc (1, sizeof (ULIST));
- if (r_ul == NULL)
- {
- return nerr_raise(NERR_NOMEM, "Unable to create ULIST: Out of memory");
- }
- r_ul->items = (void **) calloc (size, sizeof(void *));
- if (r_ul->items == NULL)
- {
- free (r_ul);
- return nerr_raise(NERR_NOMEM, "Unable to create ULIST: Out of memory");
- }
-
- r_ul->num = 0;
- r_ul->max = size;
- r_ul->flags = flags;
- *ul = r_ul;
-
- return STATUS_OK;
-}
-
-NEOERR *uListvInit(ULIST **ul, ...)
-{
- NEOERR *err;
- va_list ap;
- void *it;
-
- err = uListInit (ul, 0, 0);
- if (err) return nerr_pass (err);
-
- va_start (ap, ul);
-
- it = va_arg (ap, void *);
-
- while (it)
- {
- err = uListAppend (*ul, it);
- if (err)
- {
- uListDestroy(ul, 0);
- return nerr_pass (err);
- }
- it = va_arg (ap, void *);
- }
- return STATUS_OK;
-}
-
-NEOERR *uListAppend (ULIST *ul, void *data)
-{
- NEOERR *r;
-
- r = check_resize (ul, ul->num + 1);
- if (r != STATUS_OK)
- return r;
-
- ul->items[ul->num] = data;
- ul->num++;
-
- return STATUS_OK;
-}
-
-NEOERR *uListPop (ULIST *ul, void **data)
-{
- if (ul->num == 0)
- return nerr_raise(NERR_OUTOFRANGE, "uListPop: empty list");
-
- *data = ul->items[ul->num - 1];
- ul->num--;
-
- return STATUS_OK;
-}
-
-NEOERR *uListInsert (ULIST *ul, int x, void *data)
-{
- void **start;
- NEOERR *r;
-
- if (x < 0)
- x = ul->num + x;
-
- if (x >= ul->num)
- return nerr_raise(NERR_OUTOFRANGE, "uListInsert: past end (%d > %d)",
- x, ul->num);
-
- r = check_resize (ul, ul->num + 1);
- if (r != STATUS_OK)
- return r;
-
- start = &(ul->items[x]);
- memmove (start + 1, start, (ul->num - x) * sizeof(void *));
- ul->items[x] = data;
- ++ul->num;
-
- return STATUS_OK;
-}
-
-NEOERR *uListDelete (ULIST *ul, int x, void **data)
-{
- void **start;
-
- if (x < 0)
- x = ul->num + x;
-
- if (x >= ul->num)
- return nerr_raise(NERR_OUTOFRANGE, "uListDelete: past end (%d > %d)",
- x, ul->num);
-
- if (data != NULL)
- *data = ul->items[x];
-
- start = &(ul->items[x]);
- memmove (start, start+1, (ul->num - x - 1) * sizeof(void *));
- --ul->num;
-
- return STATUS_OK;
-}
-
-NEOERR *uListGet (ULIST *ul, int x, void **data)
-{
- if (x < 0)
- x = ul->num + x;
-
- if (x >= ul->num)
- return nerr_raise(NERR_OUTOFRANGE, "uListGet: past end (%d > %d)",
- x, ul->num);
-
- if (x < 0)
- return nerr_raise(NERR_OUTOFRANGE, "uListGet: past beginning (%d < 0)", x);
-
- *data = ul->items[x];
-
- return STATUS_OK;
-}
-
-NEOERR *uListSet (ULIST *ul, int x, void *data)
-{
- if (x >= ul->num)
- return nerr_raise(NERR_OUTOFRANGE, "uListSet: past end (%d > %d)",
- x, ul->num);
-
- ul->items[x] = data;
-
- return STATUS_OK;
-}
-
-NEOERR *uListReverse (ULIST *ul)
-{
- int i;
-
- for (i = 0; i < ul->num/2; ++i) {
- void *tmp = ul->items[i];
- ul->items[i] = ul->items[ul->num-1-i];
- ul->items[ul->num-1-i] = tmp;
- }
-
- return STATUS_OK;
-}
-
-NEOERR *uListSort (ULIST *ul, int (*compareFunc)(const void *, const void*)) {
- qsort(ul->items, ul->num, sizeof(void *), compareFunc);
- return STATUS_OK;
-}
-
-void *uListSearch (ULIST *ul, const void *key, int
- (*compareFunc)(const void *, const void*)) {
- return bsearch(key, ul->items, ul->num, sizeof(void *), compareFunc);
-}
-
-void *uListIn (ULIST *ul, const void *key, int (*compareFunc)(const void *, const void*)) {
- int i;
-
- for (i = 0; i < ul->num; ++i) {
- if (!compareFunc(key, &ul->items[i])) {
- return &ul->items[i];
- }
- }
- return NULL;
-}
-
-int uListIndex (ULIST *ul, const void *key, int (*compareFunc)(const void *, const void*)) {
- void **p = uListIn(ul, key, compareFunc);
- return p ? (p - ul->items) : -1;
-}
-
-
-
-NEOERR *uListDestroy (ULIST **ul, int flags)
-{
- if (flags & ULIST_FREE)
- {
- return uListDestroyFunc(ul, free);
- }
- else
- {
- return uListDestroyFunc(ul, NULL);
- }
-}
-
-NEOERR *uListDestroyFunc (ULIST **ul, void (*destroyFunc)(void *))
-{
- ULIST *r_ul;
-
- r_ul = *ul;
-
- if (r_ul == NULL)
- return STATUS_OK;
-
- if (destroyFunc != NULL)
- {
- int x;
- for (x = 0; x < r_ul->num; x++)
- {
- (*destroyFunc)(r_ul->items[x]);
- }
- }
- free (r_ul->items);
- free (r_ul);
- *ul = NULL;
-
- return STATUS_OK;
-}
-
-int uListLength (ULIST *ul)
-{
- if (ul == NULL) return 0;
- return ul->num;
-}
diff --git a/util/ulist.h b/util/ulist.h
deleted file mode 100644
index 6a42472..0000000
--- a/util/ulist.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Neotonic ClearSilver Templating System
- *
- * This code is made available under the terms of the
- * Neotonic ClearSilver License.
- * http://www.neotonic.com/clearsilver/license.hdf
- *
- * Copyright (C) 2001 by Brandon Long
- */
-
-#ifndef __ULIST_H_
-#define __ULIST_H_ 1
-
-#include "util/neo_err.h"
-
-typedef struct _ulist
-{
- int flags;
- void **items;
- int num;
- int max;
-} ULIST;
-
-#define ULIST_INTEGER (1<<0)
-#define ULIST_FREE (1<<1)
-#define ULIST_COPY (1<<2)
-
-NEOERR * uListInit(ULIST **ul, int size, int flags);
-NEOERR * uListvInit(ULIST **ul, ...);
-int uListLength (ULIST *ul);
-NEOERR * uListAppend (ULIST *ul, void *data);
-NEOERR * uListPop (ULIST *ul, void **data);
-NEOERR * uListInsert (ULIST *ul, int x, void *data);
-NEOERR * uListDelete (ULIST *ul, int x, void **data);
-NEOERR * uListGet (ULIST *ul, int x, void **data);
-NEOERR * uListSet (ULIST *ul, int x, void *data);
-NEOERR * uListReverse (ULIST *ul);
-NEOERR * uListSort (ULIST *ul, int (*compareFunc)(const void*, const void*));
-void *uListSearch (ULIST *ul, const void *key, int (*compareFunc)(const void *, const void*));
-void *uListIn (ULIST *ul, const void *key, int (*compareFunc)(const void *, const void*));
-int uListIndex (ULIST *ul, const void *key, int (*compareFunc)(const void *, const void*));
-NEOERR * uListDestroy (ULIST **ul, int flags);
-NEOERR * uListDestroyFunc (ULIST **ul, void (*destroyFunc)(void *));
-
-#endif /* __ULIST_H_ */
diff --git a/util/ulocks.c b/util/ulocks.c
deleted file mode 100644
index 9f15ccf..0000000
--- a/util/ulocks.c
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#include "cs_config.h"
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <string.h>
-#include <errno.h>
-
-#include "neo_misc.h"
-#include "neo_err.h"
-#include "neo_files.h"
-#include "ulocks.h"
-
-NEOERR *fCreate(int *plock, const char *file)
-{
- NEOERR *err;
- int lock;
- char *p;
-
- *plock = -1;
-
- /* note the default mode of 666 is possibly a security hole in that
- * someone else can grab your lock and DoS you. For internal use, who
- * cares?
- */
- if((lock = open(file, O_WRONLY|O_NDELAY|O_APPEND|O_CREAT|O_EXCL, 0666)) < 0)
- {
- if (errno == ENOENT)
- {
- p = strrchr (file, '/');
- if (p != NULL)
- {
- *p = '\0';
- err = ne_mkdirs(file, 0777);
- *p = '/';
- if (err != STATUS_OK) return nerr_pass(err);
- lock = open(file, O_WRONLY|O_NDELAY|O_APPEND|O_CREAT, 0666);
- }
- }
- if (errno == EEXIST)
- return nerr_pass(fFind(plock, file));
-
- if (lock < 0)
- return nerr_raise_errno (NERR_IO, "Unable to open lock file %s", file);
- }
-
- *plock = lock;
-
- return STATUS_OK;
-}
-
-void fDestroy(int lock)
-{
-
- if(lock < 0)
- return;
-
- close(lock);
-
- return;
-}
-
-NEOERR *fFind(int *plock, const char *file)
-{
- int lock;
-
- *plock = -1;
-
- if((lock = open(file, O_WRONLY|O_NDELAY|O_APPEND, 0666)) < 0) {
- if (errno == ENOENT)
- return nerr_raise (NERR_NOT_FOUND, "Unable to find lock file %s", file);
- return nerr_raise_errno (NERR_IO, "Unable to open lock file %s", file);
- }
-
- *plock = lock;
-
- return STATUS_OK;
-}
-
-NEOERR *fLock(int lock)
-{
-
- if(lockf(lock, F_LOCK, 0) < 0)
- return nerr_raise_errno (NERR_LOCK, "File lock failed");
-
- return STATUS_OK;
-}
-
-void fUnlock(int lock)
-{
-
- if(lock < 0)
- return;
-
- lockf(lock, F_ULOCK, 0);
-
- return;
-}
-
-#ifdef HAVE_PTHREADS
-
-NEOERR *mCreate(pthread_mutex_t *mutex)
-{
- int err;
-
- if((err = pthread_mutex_init(mutex, NULL))) {
- return nerr_raise (NERR_LOCK, "Unable to initialize mutex: %s",
- strerror(err));
- }
-
- return STATUS_OK;
-}
-
-void mDestroy(pthread_mutex_t *mutex)
-{
-
- pthread_mutex_destroy(mutex);
-
- return;
-}
-
-NEOERR *mLock(pthread_mutex_t *mutex)
-{
- int err;
-
- if((err = pthread_mutex_lock(mutex)))
- return nerr_raise(NERR_LOCK, "Mutex lock failed: %s", strerror(err));
-
- return STATUS_OK;
-}
-
-NEOERR *mUnlock(pthread_mutex_t *mutex)
-{
- int err;
-
- if((err = pthread_mutex_unlock(mutex)))
- return nerr_raise(NERR_LOCK, "Mutex unlock failed: %s", strerror(err));
-
- return STATUS_OK;
-}
-
-NEOERR *cCreate(pthread_cond_t *cond)
-{
- int err;
-
- if((err = pthread_cond_init(cond, NULL))) {
- return nerr_raise(NERR_LOCK, "Unable to initialize condition variable: %s",
- strerror(err));
- }
-
- return STATUS_OK;
-}
-
-void cDestroy(pthread_cond_t *cond)
-{
- pthread_cond_destroy(cond);
-
- return;
-}
-
-NEOERR *cWait(pthread_cond_t *cond, pthread_mutex_t *mutex)
-{
- int err;
-
- if((err = pthread_cond_wait(cond, mutex)))
- return nerr_raise(NERR_LOCK, "Condition wait failed: %s", strerror(err));
-
- return STATUS_OK;
-}
-
-NEOERR *cBroadcast(pthread_cond_t *cond)
-{
- int err;
-
- if((err = pthread_cond_broadcast(cond)))
- return nerr_raise(NERR_LOCK, "Condition broadcast failed: %s",
- strerror(err));
-
- return STATUS_OK;
-}
-
-NEOERR *cSignal(pthread_cond_t *cond)
-{
- int err;
-
- if((err = pthread_cond_signal(cond)))
- return nerr_raise (NERR_LOCK, "Condition signal failed: %s", strerror(err));
-
- return STATUS_OK;
-}
-
-#endif
diff --git a/util/ulocks.h b/util/ulocks.h
deleted file mode 100644
index 8b3bfb1..0000000
--- a/util/ulocks.h
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- *
- * Thread-safe Skiplist Using Integer Identifiers
- * Copyright 1998-2000 Scott Shambarger (scott@shambarger.net)
- *
- * This software is open source. Permission to use, copy, modify, and
- * distribute this software for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies. No
- * warranty of any kind is expressed or implied. Use at your own risk.
- *
- * 1/14/2001 blong
- * Made it use neo errs... probably need to check locking functions
- * for error returns...
- *
- */
-
-#ifndef __ULOCKS_H_
-#define __ULOCKS_H_
-
-
-NEOERR *fCreate(int *plock, const char *file);
-/*
- * Function: fCreate - create a file lock.
- * Description: Creates a file lock on named file <file>. The lock is
- * returned in <plock>.
- * Input: plock - place for lock.
- * file - path of file to use as lock.
- * Output: plock - set to lock identifier.
- * Return: STATUS_OK on success
- * NERR_IO on failure
- * MT-Level: Safe.
- */
-
-NEOERR *fFind(int *plock, const char *file);
-/*
- * Function: fFind - find a file lock.
- * Description: Find a file identified by the path <file>, and returns a
- * lock identifier for it in <plock>. If the file doesn't
- * exist, returns true.
- * Input: plock - place for lock.
- * file - path of file to use as lock.
- * Output: plock - set to lock identifier.
- * Return: STATUS_OK if found
- * NERR_IO on failure
- * MT-Level: Safe.
- */
-
-void fDestroy(int lock);
-/*
- * Function: fDestroy - destroy a lock.
- * Description: Destroys the lock <lock> that was created by fCreate()
- * or fFind().
- * Input: lock - Lock to destroy.
- * Output: None.
- * Return: None.
- * MT-Level: Safe for unique <lock>.
- */
-
-NEOERR *fLock(int lock);
-/*
- * Function: fLock - acquire file lock.
- * Description: Acquires the lock identified by <lock>. This call
- * blocks until the lock is acquired.
- * Input: lock - Lock to acquire.
- * Output: None.
- * Return: STATUS_OK on success
- * NERR_LOCK on failure
- * MT-Level: Safe.
- */
-
-void fUnlock(int lock);
-/*
- * Function: fUnlock - release file lock.
- * Description: Releases the lock identified by <lock>.
- * Input: lock - Lock to release.
- * Output: None.
- * Return: None.
- * MT-Level: Safe.
- */
-
-#ifdef HAVE_PTHREADS
-
-#include <pthread.h>
-
-
-NEOERR *mCreate(pthread_mutex_t *mutex);
-/*
- * Function: mCreate - initialize a mutex.
- * Description: Initializes the mutex <mutex>.
- * Input: mutex - mutex to initialize.
- * Output: None.
- * Return: STATUS_OK on success
- * NERR_LOCK on failure
- * MT-Level: Safe for unique <mutex>.
- */
-
-void mDestroy(pthread_mutex_t *mutex);
-/*
- * Function: mDestroy - destroy a mutex.
- * Description: Destroys the mutex <mutex> that was initialized by mCreate().
- * Input: mutex - mutex to destroy.
- * Output: None.
- * Return: None.
- * MT-Level: Safe for unique <mutex>.
- */
-
-NEOERR *mLock(pthread_mutex_t *mutex);
-/*
- * Function: mLock - lock a mutex.
- * Description: Locks the mutex <mutex>. This call blocks until the mutex
- * is acquired.
- * Input: mutex - mutex to lock.
- * Output: None.
- * Return: STATUS_OK on success
- * NERR_LOCK on failure
- * MT-Level: Safe.
- */
-
-NEOERR *mUnlock(pthread_mutex_t *mutex);
-/*
- * Function: mUnlock - unlock a mutex.
- * Description: Unlocks the mutex <mutex>.
- * Input: mutex - mutex to unlock.
- * Output: None.
- * Return: STATUS_OK on success
- * NERR_LOCK on failure
- * MT-Level: Safe.
- */
-
-NEOERR *cCreate(pthread_cond_t *cond);
-/*
- * Function: cCreate - initialize a condition variable.
- * Description: Initializes the condition variable <cond>.
- * Input: cond - condition variable to initialize.
- * Output: None.
- * Return: STATUS_OK on success
- * NERR_LOCK on failure
- * MT-Level: Safe for unique <cond>.
- */
-
-void cDestroy(pthread_cond_t *cond);
-/*
- * Function: cDestroy - destroy a condition variable.
- * Description: Destroys the condition variable <cond> that was
- * initialized by cCreate().
- * Input: cond - condition variable to destroy.
- * Output: None.
- * Return: None.
- * MT-Level: Safe for unique <cond>.
- */
-
-NEOERR *cWait(pthread_cond_t *cond, pthread_mutex_t *mutex);
-/*
- * Function: cWait - wait a condition variable signal.
- * Description: Waits for a signal on condition variable <cond>.
- * The mutex <mutex> must be locked by the thread.
- * Input: cond - condition variable to wait on.
- * mutex - locked mutex to protect <cond>.
- * Output: None.
- * Return: STATUS_OK on success
- * NERR_LOCK on failure
- * MT-Level: Safe.
- */
-
-NEOERR *cBroadcast(pthread_cond_t *cond);
-/*
- * Function: cBroadcast - broadcast signal to all waiting threads.
- * Description: Broadcasts a signal to all threads waiting on condition
- * variable <cond>.
- * Input: cond - condition variable to broadcast on.
- * Output: None.
- * Return: STATUS_OK on success
- * NERR_LOCK on failure
- * MT-Level: Safe.
- */
-
-NEOERR *cSignal(pthread_cond_t *cond);
-/*
- * Function: cSignal - send signal to one waiting thread.
- * Description: Sends a signal to one thread waiting on condition
- * variable <cond>.
- * Input: cond - condition variable to send signal on.
- * Output: None.
- * Return: STATUS_OK on success
- * NERR_LOCK on failure
- * MT-Level: Safe.
- */
-
-#endif /* HAVE_PTHREAD */
-
-#endif /* __ULOCKS_H_ */
diff --git a/util/wdb.c b/util/wdb.c
deleted file mode 100644
index 558168f..0000000
--- a/util/wdb.c
+++ /dev/null
@@ -1,1596 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-/*
- * The wdb is a wrapper around the sleepycat db library which adds
- * a relatively simple data/column definition. In many respects, this
- * code is way more complicated than it ever needed to be, but it works,
- * so I'm loathe to "fix" it.
- *
- * One of they key features of this is the ability to update the
- * "schema" of the wdb without changing all of the existing rows of
- * data.
- */
-
-#include "cs_config.h"
-
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <errno.h>
-#include <string.h>
-#include <limits.h>
-#include <db.h>
-#include <ctype.h>
-
-#include "neo_misc.h"
-#include "neo_err.h"
-#include "dict.h"
-#include "ulist.h"
-#include "skiplist.h"
-#include "wdb.h"
-
-
-#define DEFN_VERSION_1 "WDB-VERSION-200006301"
-#define PACK_VERSION_1 1
-
-static void string_rstrip (char *s)
-{
- size_t len;
-
- len = strlen(s);
- len--;
- while (len > 0 && isspace(s[len]))
- {
- s[len] = '\0';
- len--;
- }
- return;
-}
-
-static int to_hex (unsigned char ch, unsigned char *s)
-{
- unsigned int uvalue = ch;
-
- s[1] = "0123456789ABCDEF"[uvalue % 16];
- uvalue = (uvalue / 16); s[0] = "0123456789ABCDEF"[uvalue % 16];
- return 0;
-}
-
-int Index_hex[128] = {
- -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
- -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
- -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1, -1,-1,-1,-1,
- -1,10,11,12, 13,14,15,-1, -1,-1,-1,-1, -1,-1,-1,-1,
- -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,10,11,12, 13,14,15,-1, -1,-1,-1,-1, -1,-1,-1,-1,
- -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1
-};
-
-#define hexval(c) Index_hex[(unsigned int)(c)]
-
-/* Encoding means any non-printable characters and : and % */
-static NEOERR *wdb_encode_str_alloc (const char *s, char **o)
-{
- int x = 0;
- int c = 0;
- char *out;
- unsigned char ch;
-
- while (s[x])
- {
- ch = (unsigned char) s[x];
- if ((ch < 32) || (ch > 127) || (ch == ':') || (ch == '%') || isspace(ch))
- c++;
- x++;
- }
-
- out = (char *) malloc (sizeof (char) * (x + c * 3) + 1);
- if (out == NULL)
- return nerr_raise (NERR_NOMEM,
- "Unable to allocate memory for encoding %s", s);
-
- x = 0;
- c = 0;
-
- *o = out;
-
- while (s[x])
- {
- ch = (unsigned char) s[x];
- if ((ch < 32) || (ch > 127) || (ch == ':') || (ch == '%') || isspace(ch))
- {
- out[c++] = '%';
- to_hex (s[x], &out[c]);
- c+=2;
- }
- else
- {
- out[c++] = s[x];
- }
- x++;
- }
- out[c] = '\0';
-
- return STATUS_OK;
-}
-
-static NEOERR *wdb_decode_str_alloc (const char *s, char **o)
-{
- int x = 0;
- int c = 0;
- char *out;
- unsigned char ch;
-
-
- x = strlen(s);
- /* Overkill, the decoded string will be smaller */
- out = (char *) malloc (sizeof (char) * (x + 1));
- if (out == NULL)
- return nerr_raise (NERR_NOMEM,
- "Unable to allocate memory for decoding %s", s);
-
- x = 0;
- c = 0;
-
- while (s[x])
- {
- if (s[x] == '%')
- {
- x++;
- ch = hexval(s[x]) << 4;
- x++;
- ch |= hexval(s[x]);
- out[c++] = ch;
- }
- else
- {
- out[c++] = s[x];
- }
- x++;
- }
- out[c] = '\0';
- *o = out;
-
- return STATUS_OK;
-}
-
-static void free_cb (void *value, void *rock)
-{
- free (value);
-}
-
-static void free_col_cb (void *value, void *rock)
-{
- WDBColumn *col;
-
- col = (WDBColumn *)value;
-
- free (col->name);
- free (col);
-}
-
-static NEOERR *wdb_alloc (WDB **wdb, int flags)
-{
- WDB *my_wdb;
- NEOERR *err = STATUS_OK;
-
- my_wdb = (WDB *) calloc (1, sizeof (WDB));
-
- if (my_wdb == NULL)
- return nerr_raise (NERR_NOMEM, "Unable to allocate memory for WDB");
-
- do
- {
- err = dictCreate (&(my_wdb->attrs), 0, 2, 5, 0, 0, free_cb, NULL);
- if (err != STATUS_OK) break;
- err = dictCreate (&(my_wdb->cols), 0, 2, 5, 0, 0, free_col_cb, NULL);
- if (err != STATUS_OK) break;
- err = uListInit (&(my_wdb->cols_l), 0, 0);
- if (err != STATUS_OK) break;
- err = skipNewList(&(my_wdb->ondisk), 0, 4, 2, 0, NULL, NULL);
- if (err != STATUS_OK) break;
-
- *wdb = my_wdb;
-
- return STATUS_OK;
- } while (0);
-
- wdb_destroy(&my_wdb);
- return nerr_pass (err);
-}
-
-
-#define STATE_REQUIRED 1
-#define STATE_ATTRIBUTES 2
-#define STATE_COLUMN_DEF 3
-
-static NEOERR *wdb_load_defn_v1 (WDB *wdb, FILE *fp)
-{
- char line[1024];
- int state = 1;
- char *k, *v;
- NEOERR *err = STATUS_OK;
- int colindex = 1;
- WDBColumn *col;
-
- while (fgets(line, sizeof(line), fp) != NULL)
- {
- string_rstrip(line);
- switch (state)
- {
- case STATE_REQUIRED:
- if (!strcmp(line, "attributes"))
- state = STATE_ATTRIBUTES;
- else if (!strcmp(line, "columns"))
- state = STATE_COLUMN_DEF;
- else
- {
- k = line;
- v = strchr(line, ':');
- /* HACK */
- if (!strcmp(k, "name") && ((v == NULL) || (v[1] == '\0')))
- {
- v = "dNone";
- }
- else
- {
- if (v == NULL)
- return nerr_raise (NERR_PARSE, "Error parsing %s", line);
- if (v[1] == '\0')
- return nerr_raise (NERR_PARSE, "Error parsing %s", line);
- }
- v[0] = '\0';
- v++;
- if (!strcmp(k, "key"))
- {
- err = wdb_decode_str_alloc (v, &(wdb->key));
- if (err) return nerr_pass(err);
- }
- else if (!strcmp(k, "name"))
- {
- err = wdb_decode_str_alloc (v, &(wdb->name));
- if (err) return nerr_pass(err);
- }
- else if (!strcmp(k, "ondisk"))
- {
- wdb->last_ondisk = atoi (v);
- }
- }
- break;
- case STATE_ATTRIBUTES:
- if (!strcmp(line, "columns"))
- state = STATE_COLUMN_DEF;
- else
- {
- k = line;
- v = strchr(line, ':');
- if (v == NULL)
- return nerr_raise (NERR_PARSE, "Error parsing %s", line);
- v[0] = '\0';
- v++;
- err = wdb_decode_str_alloc (k, &k);
- if (err) return nerr_pass(err);
- err = wdb_decode_str_alloc (v, &v);
- if (err) return nerr_pass(err);
- err = dictSetValue(wdb->attrs, k, v);
- free(k);
- if (err)
- return nerr_pass_ctx(err, "Error parsing %s", line);
- }
- break;
- case STATE_COLUMN_DEF:
- k = line;
- v = strchr(line, ':');
- if (v == NULL)
- return nerr_raise (NERR_PARSE, "Error parsing %s", line);
- if (v[1] == '\0')
- return nerr_raise (NERR_PARSE, "Error parsing %s", line);
- v[0] = '\0';
- v++;
- err = wdb_decode_str_alloc (k, &k);
- if (err) return nerr_pass(err);
- col = (WDBColumn *) calloc (1, sizeof (WDBColumn));
- col->name = k;
- col->inmem_index = colindex++;
- col->type = *v;
- v+=2;
- col->ondisk_index = atoi(v);
- err = dictSetValue(wdb->cols, k, col);
- if (err)
- return nerr_raise (NERR_PARSE, "Error parsing %s", line);
- err = uListAppend(wdb->cols_l, col);
- if (err) return nerr_pass(err);
- /* stupid skiplist will assert */
- if (col->ondisk_index == 0)
- {
- return nerr_raise (NERR_ASSERT, "Invalid ondisk mapping for %s", k);
- }
- err = skipInsert (wdb->ondisk, col->ondisk_index,
- (void *)(col->inmem_index), 0);
- if (err)
- return nerr_pass_ctx(err, "Unable to update ondisk mapping for %s", k);
- break;
- default:
- return nerr_raise (NERR_ASSERT, "Invalid state %d", state);
- }
- }
- return STATUS_OK;
-}
-
-static NEOERR *wdb_save_defn_v1 (WDB *wdb, FILE *fp)
-{
- NEOERR *err = STATUS_OK;
- WDBColumn *col;
- char *s = NULL;
- char *key = NULL;
- int r, x, len;
- char *k = NULL;
- char *v = NULL;
-
- /* Write version string */
- r = fprintf (fp, "%s\n", DEFN_VERSION_1);
- if (!r) goto save_err;
-
- err = wdb_encode_str_alloc (wdb->name, &s);
- if (err) goto save_err;
- r = fprintf (fp, "name:%s\n", s);
- if (!r) goto save_err;
- free (s);
-
- err = wdb_encode_str_alloc (wdb->key, &s);
- if (err != STATUS_OK) goto save_err;
- r = fprintf (fp, "key:%s\n", s);
- if (!r) goto save_err;
- free (s);
- s = NULL;
-
- r = fprintf (fp, "ondisk:%d\n", wdb->last_ondisk);
- if (!r) goto save_err;
-
- r = fprintf (fp, "attributes\n");
- if (!r) goto save_err;
- key = NULL;
- s = (char *) dictNext (wdb->attrs, &key, NULL);
- while (s)
- {
- err = wdb_encode_str_alloc (key, &k);
- if (err != STATUS_OK) goto save_err;
- err = wdb_encode_str_alloc (s, &v);
- if (err != STATUS_OK) goto save_err;
- r = fprintf (fp, "%s:%s\n", k, v);
- if (!r) goto save_err;
- free (k);
- free (v);
- k = NULL;
- v = NULL;
- s = (char *) dictNext (wdb->attrs, &key, NULL);
- }
- s = NULL;
-
- r = fprintf (fp, "columns\n");
- if (!r) goto save_err;
-
- len = uListLength(wdb->cols_l);
-
- for (x = 0; x < len; x++)
- {
- err = uListGet (wdb->cols_l, x, (void *)&col);
- if (err) goto save_err;
- err = wdb_encode_str_alloc (col->name, &s);
- if (err != STATUS_OK) goto save_err;
- r = fprintf (fp, "%s:%c:%d\n", s, col->type, col->ondisk_index);
- if (!r) goto save_err;
- free(s);
- s = NULL;
- }
-
- return STATUS_OK;
-
-save_err:
- if (s != NULL) free (s);
- if (k != NULL) free (k);
- if (v != NULL) free (v);
- if (err == STATUS_OK) return nerr_pass(err);
- return nerr_raise (r, "Unable to save defn");
-}
-
-static NEOERR *wdb_load_defn (WDB *wdb, const char *name)
-{
- char path[_POSIX_PATH_MAX];
- char line[1024];
- FILE *fp;
- NEOERR *err = STATUS_OK;
-
- snprintf (path, sizeof(path), "%s.wdf", name);
- fp = fopen (path, "r");
- if (fp == NULL)
- {
- if (errno == ENOENT)
- return nerr_raise (NERR_NOT_FOUND, "Unable to open defn %s", name);
- return nerr_raise_errno (NERR_IO, "Unable to open defn %s", name);
- }
-
- /* Read Version string */
- if (fgets (line, sizeof(line), fp) == NULL)
- {
- fclose(fp);
- return nerr_raise_errno (NERR_IO, "Unable to read defn %s", name);
- }
- string_rstrip(line);
-
- if (!strcmp(line, DEFN_VERSION_1))
- {
- err = wdb_load_defn_v1(wdb, fp);
- fclose(fp);
- if (err) return nerr_pass(err);
- }
- else
- {
- fclose(fp);
- return nerr_raise (NERR_ASSERT, "Unknown defn version %s: %s", line, name);
- }
-
- wdb->table_version = rand();
-
- return STATUS_OK;
-}
-
-static NEOERR *wdb_save_defn (WDB *wdb, const char *name)
-{
- char path[_POSIX_PATH_MAX];
- char path2[_POSIX_PATH_MAX];
- FILE *fp;
- NEOERR *err = STATUS_OK;
- int r;
-
- snprintf (path, sizeof(path), "%s.wdf.new", name);
- snprintf (path2, sizeof(path2), "%s.wdf", name);
- fp = fopen (path, "w");
- if (fp == NULL)
- return nerr_raise_errno (NERR_IO, "Unable to open defn %s", name);
-
- err = wdb_save_defn_v1 (wdb, fp);
- fclose (fp);
- if (err != STATUS_OK)
- {
- unlink (path);
- return nerr_pass (err);
- }
-
- r = unlink (path2);
- if (r == -1 && errno != ENOENT)
- return nerr_raise_errno (NERR_IO, "Unable to unlink %s", path2);
- r = link (path, path2);
- if (r == -1)
- return nerr_raise_errno (NERR_IO, "Unable to link %s to %s", path, path2);
- r = unlink (path);
-
- wdb->defn_dirty = 0;
- wdb->table_version = rand();
-
- return STATUS_OK;
-}
-
-NEOERR *wdb_open (WDB **wdb, const char *name, int flags)
-{
- WDB *my_wdb;
- char path[_POSIX_PATH_MAX];
- NEOERR *err = STATUS_OK;
- int r;
-
- *wdb = NULL;
-
- err = wdb_alloc (&my_wdb, flags);
- if (err) return nerr_pass(err);
-
- my_wdb->path = strdup (name);
- if (err)
- {
- wdb_destroy (&my_wdb);
- return nerr_pass(err);
- }
-
- err = wdb_load_defn (my_wdb, name);
- if (err)
- {
- wdb_destroy (&my_wdb);
- return nerr_pass(err);
- }
-
- snprintf (path, sizeof(path), "%s.wdb", name);
- r = db_open(path, DB_BTREE, 0, 0, NULL, NULL, &(my_wdb->db));
- if (r)
- {
- wdb_destroy (&my_wdb);
- return nerr_raise (NERR_DB, "Unable to open database %s: %d", name, r);
- }
-
- *wdb = my_wdb;
-
- return STATUS_OK;
-}
-
-NEOERR *wdb_save (WDB *wdb)
-{
- if (wdb->defn_dirty)
- {
- wdb_save_defn (wdb, wdb->path);
- }
- return STATUS_OK;
-}
-
-void wdb_destroy (WDB **wdb)
-{
- WDB *my_wdb;
-
- my_wdb = *wdb;
-
- if (my_wdb == NULL) return;
-
- if (my_wdb->defn_dirty)
- {
- wdb_save_defn (my_wdb, my_wdb->path);
- }
-
- if (my_wdb->attrs != NULL)
- {
- dictDestroy (my_wdb->attrs);
- }
-
- if (my_wdb->cols != NULL)
- {
- dictDestroy (my_wdb->cols);
- }
-
- if (my_wdb->cols_l != NULL)
- {
- uListDestroy(&(my_wdb->cols_l), 0);
- }
-
- if (my_wdb->ondisk != NULL)
- {
- skipFreeList(my_wdb->ondisk);
- }
-
- if (my_wdb->db != NULL)
- {
- my_wdb->db->close (my_wdb->db, 0);
- my_wdb->db = NULL;
- }
-
- if (my_wdb->path != NULL)
- {
- free(my_wdb->path);
- my_wdb->path = NULL;
- }
- if (my_wdb->name != NULL)
- {
- free(my_wdb->name);
- my_wdb->name = NULL;
- }
- if (my_wdb->key != NULL)
- {
- free(my_wdb->key);
- my_wdb->key = NULL;
- }
-
- free (my_wdb);
- *wdb = NULL;
-
- return;
-}
-
-#define PACK_UB4(pdata, plen, pmax, pn) \
-{ \
- if (plen + 4 > pmax) \
- { \
- pmax *= 2; \
- pdata = realloc ((void *)pdata, pmax); \
- if (pdata == NULL) goto pack_err; \
- } \
- pdata[plen++] = (0x0ff & (pn >> 0)); \
- pdata[plen++] = (0x0ff & (pn >> 8)); \
- pdata[plen++] = (0x0ff & (pn >> 16)); \
- pdata[plen++] = (0x0ff & (pn >> 24)); \
-}
-
-#define UNPACK_UB4(pdata, plen, pn, pd) \
-{ \
- if (pn + 4 > plen) \
- goto pack_err; \
- pd = ((0x0ff & pdata[pn+0])<<0) | ((0x0ff & pdata[pn+1])<<8) | \
- ((0x0ff & pdata[pn+2])<<16) | ((0x0ff & pdata[pn+3])<<24); \
- pn+=4; \
-}
-
-#define PACK_BYTE(pdata, plen, pmax, pn) \
-{ \
- if (plen + 1 > pmax) \
- { \
- pmax *= 2; \
- pdata = realloc ((void *)pdata, pmax); \
- if (pdata == NULL) goto pack_err; \
- } \
- pdata[plen++] = (0x0ff & (pn >> 0)); \
-}
-
-#define UNPACK_BYTE(pdata, plen, pn, pd) \
-{ \
- if (pn + 1 > plen) \
- goto pack_err; \
- pd = pdata[pn++]; \
-}
-
-#define PACK_STRING(pdata, plen, pmax, dl, ds) \
-{ \
- if (plen + 4 + dl > pmax) \
- { \
- while (plen + 4 + dl > pmax) \
- pmax *= 2; \
- pdata = realloc ((void *)pdata, pmax); \
- if (pdata == NULL) goto pack_err; \
- } \
- pdata[plen++] = (0x0ff & (dl >> 0)); \
- pdata[plen++] = (0x0ff & (dl >> 8)); \
- pdata[plen++] = (0x0ff & (dl >> 16)); \
- pdata[plen++] = (0x0ff & (dl >> 24)); \
- memcpy (&pdata[plen], ds, dl); \
- plen+=dl;\
-}
-
-#define UNPACK_STRING(pdata, plen, pn, ps) \
-{ \
- int pl; \
- if (pn + 4 > plen) \
- goto pack_err; \
- pl = ((0x0ff & pdata[pn+0])<<0) | ((0x0ff & pdata[pn+1])<<8) | \
- ((0x0ff & pdata[pn+2])<<16) | ((0x0ff & pdata[pn+3])<<24); \
- pn+=4; \
- if (pl) \
- { \
- ps = (char *)malloc(sizeof(char)*(pl+1)); \
- if (ps == NULL) \
- goto pack_err; \
- memcpy (ps, &pdata[pn], pl); \
- ps[pl] = '\0'; \
- pn += pl; \
- } else { \
- ps = NULL; \
- } \
-}
-
-/* A VERSION_1 Row consists of the following data:
- * UB4 VERSION
- * UB4 DATA COUNT
- * DATA where
- * UB4 ONDISK INDEX
- * UB1 TYPE
- * if INT, then UB4
- * if STR, then UB4 length and length UB1s
- */
-
-static NEOERR *pack_row (WDB *wdb, WDBRow *row, void **rdata, int *rdlen)
-{
- char *data;
- int x, len, dlen, dmax;
- char *s;
- int n;
- WDBColumn *col;
- NEOERR *err;
-
- *rdata = NULL;
- *rdlen = 0;
- /* allocate */
- data = (char *)malloc(sizeof (char) * 1024);
- if (data == NULL)
- return nerr_raise (NERR_NOMEM, "Unable to allocate memory to pack row");
-
- dmax = 1024;
- dlen = 0;
-
- PACK_UB4 (data, dlen, dmax, PACK_VERSION_1);
-/* PACK_UB4 (data, dlen, dmax, time(NULL)); */
-
- len = uListLength(wdb->cols_l);
- if (len > row->data_count)
- len = row->data_count;
- PACK_UB4 (data, dlen, dmax, len);
-
- for (x = 0; x < len; x++)
- {
- err = uListGet (wdb->cols_l, x, (void *)&col);
- if (err) goto pack_err;
- PACK_UB4 (data, dlen, dmax, col->ondisk_index);
- PACK_BYTE (data, dlen, dmax, col->type);
- switch (col->type)
- {
- case WDB_TYPE_INT:
- n = (int)(row->data[x]);
- PACK_UB4 (data, dlen, dmax, n);
- break;
- case WDB_TYPE_STR:
- s = (char *)(row->data[x]);
- if (s == NULL)
- {
- s = "";
- }
- n = strlen(s);
- PACK_STRING (data, dlen, dmax, n, s);
- break;
- default:
- free (data);
- return nerr_raise (NERR_ASSERT, "Unknown type %d", col->type);
- }
- }
-
- *rdata = data;
- *rdlen = dlen;
- return STATUS_OK;
-
-pack_err:
- if (data != NULL)
- free (data);
- if (err == STATUS_OK)
- return nerr_raise(NERR_NOMEM, "Unable to allocate memory for pack_row");
- return nerr_pass(err);
-}
-
-static NEOERR *unpack_row (WDB *wdb, void *rdata, int dlen, WDBRow *row)
-{
- unsigned char *data = rdata;
- int version, n;
- int count, x, ondisk_index, type, d_int, inmem_index;
- char *s;
-
- n = 0;
-
- UNPACK_UB4(data, dlen, n, version);
-
- switch (version)
- {
- case PACK_VERSION_1:
- UNPACK_UB4(data, dlen, n, count);
- for (x = 0; x<count; x++)
- {
- UNPACK_UB4 (data, dlen, n, ondisk_index);
- UNPACK_BYTE (data, dlen, n, type);
- inmem_index = (int) skipSearch (wdb->ondisk, ondisk_index, NULL);
-
- switch (type)
- {
- case WDB_TYPE_INT:
- UNPACK_UB4 (data, dlen, n, d_int);
- if (inmem_index != 0)
- row->data[inmem_index-1] = (void *) d_int;
- break;
- case WDB_TYPE_STR:
- UNPACK_STRING (data, dlen, n, s);
- if (inmem_index != 0)
- row->data[inmem_index-1] = s;
- break;
- default:
- return nerr_raise (NERR_ASSERT, "Unknown type %d for col %d", type, ondisk_index);
- }
- }
- break;
- default:
- return nerr_raise (NERR_ASSERT, "Unknown version %d", version);
- }
-
- return STATUS_OK;
-pack_err:
- return nerr_raise(NERR_PARSE, "Unable to unpack row %s", row->key_value);
-}
-
-NEOERR *wdb_column_insert (WDB *wdb, int loc, const char *key, char type)
-{
- NEOERR *err;
- WDBColumn *col, *ocol;
- int x, len;
-
- col = (WDBColumn *) dictSearch (wdb->cols, key, NULL);
-
- if (col != NULL)
- return nerr_raise (NERR_DUPLICATE,
- "Duplicate key %s:%d", key, col->inmem_index);
-
- col = (WDBColumn *) calloc (1, sizeof (WDBColumn));
- if (col == NULL)
- {
- return nerr_raise (NERR_NOMEM,
- "Unable to allocate memory for creation of col %s:%d", key, loc);
- }
-
- col->name = strdup(key);
- if (col->name == NULL)
- {
- free(col);
- return nerr_raise (NERR_NOMEM,
- "Unable to allocate memory for creation of col %s:%d", key, loc);
- }
- col->type = type;
- col->ondisk_index = wdb->last_ondisk++;
- /* -1 == append */
- if (loc == -1)
- {
- err = dictSetValue(wdb->cols, key, col);
- if (err)
- {
- free (col->name);
- free (col);
- return nerr_pass_ctx (err,
- "Unable to insert for creation of col %s:%d", key, loc);
- }
- err = uListAppend (wdb->cols_l, (void *)col);
- if (err) return nerr_pass(err);
- x = uListLength (wdb->cols_l);
- col->inmem_index = x;
- err = skipInsert (wdb->ondisk, col->ondisk_index,
- (void *)(col->inmem_index), 0);
- if (err)
- return nerr_pass_ctx (err, "Unable to update ondisk mapping for %s", key);
- }
- else
- {
- /* We are inserting this in middle, so the skipList ondisk is now
- * invalid, as is the inmem_index for all cols */
- err = dictSetValue(wdb->cols, key, col);
- if (err)
- {
- free (col->name);
- free (col);
- return nerr_pass_ctx (err,
- "Unable to insert for creation of col %s:%d", key, loc);
- }
- err = uListInsert (wdb->cols_l, loc, (void *)col);
- if (err) return nerr_pass(err);
- len = uListLength (wdb->cols_l);
- /* Fix up inmem_index and ondisk skipList */
- for (x = 0; x < len; x++)
- {
- err = uListGet (wdb->cols_l, x, (void *)&ocol);
- if (err) return nerr_pass(err);
- ocol->inmem_index = x + 1;
- err = skipInsert (wdb->ondisk, ocol->ondisk_index,
- (void *)(ocol->inmem_index), TRUE);
- if (err)
- return nerr_pass_ctx (err, "Unable to update ondisk mapping for %s", key);
- }
- }
-
- wdb->defn_dirty = 1;
- wdb->table_version = rand();
-
- return STATUS_OK;
-}
-
-NEOERR *wdb_column_update (WDB *wdb, const char *oldkey, const char *newkey)
-{
- WDBColumn *ocol, *col;
- WDBColumn *vcol;
- NEOERR *err = STATUS_OK;
- int x, len, r;
-
- ocol = (WDBColumn *) dictSearch (wdb->cols, oldkey, NULL);
-
- if (ocol == NULL)
- return nerr_raise (NERR_NOT_FOUND,
- "Unable to find column for key %s", oldkey);
-
- col = (WDBColumn *) calloc (1, sizeof (WDBColumn));
- if (col == NULL)
- {
- return nerr_raise (NERR_NOMEM,
- "Unable to allocate memory for column update %s", newkey);
- }
-
- *col = *ocol;
- col->name = strdup(newkey);
- if (col->name == NULL)
- {
- free(col);
- return nerr_raise (NERR_NOMEM,
- "Unable to allocate memory for column update %s", oldkey);
- }
- len = uListLength(wdb->cols_l);
- for (x = 0; x < len; x++)
- {
- err = uListGet (wdb->cols_l, x, (void *)&vcol);
- if (err) return nerr_pass(err);
- if (!strcmp(vcol->name, oldkey))
- {
- err = uListSet (wdb->cols_l, x, (void *)col);
- if (err) return nerr_pass(err);
- break;
- }
- }
- if (x>len)
- {
- return nerr_raise (NERR_ASSERT, "Unable to find cols_l for key %s", oldkey);
- }
-
- r = dictRemove (wdb->cols, oldkey); /* Only failure is key not found */
- err = dictSetValue(wdb->cols, newkey, col);
- if (err)
- {
- free (col->name);
- free (col);
- return nerr_pass_ctx (err,
- "Unable to insert for update of col %s->%s", oldkey, newkey);
- }
-
- wdb->defn_dirty = 1;
- wdb->table_version = rand();
-
- return STATUS_OK;
-}
-
-NEOERR *wdb_column_delete (WDB *wdb, const char *name)
-{
- WDBColumn *col;
- NEOERR *err = STATUS_OK;
- int len, x, r;
-
- len = uListLength(wdb->cols_l);
- for (x = 0; x < len; x++)
- {
- err = uListGet (wdb->cols_l, x, (void *)&col);
- if (err) return nerr_pass(err);
- if (!strcmp(col->name, name))
- {
- err = uListDelete (wdb->cols_l, x, NULL);
- if (err) return nerr_pass(err);
- break;
- }
- }
-
- r = dictRemove (wdb->cols, name); /* Only failure is key not found */
- if (!r)
- {
- return nerr_raise (NERR_NOT_FOUND,
- "Unable to find column for key %s", name);
- }
- wdb->defn_dirty = 1;
- wdb->table_version = rand();
-
- return STATUS_OK;
-}
-
-NEOERR *wdb_column_exchange (WDB *wdb, const char *key1, const char *key2)
-{
- return nerr_raise (NERR_ASSERT,
- "wdb_column_exchange: Not Implemented");
-}
-
-/* Not that there's that much point in changing the key name ... */
-NEOERR *wdb_update (WDB *wdb, const char *name, const char *key)
-{
- if (name != NULL && strcmp(wdb->name, name))
- {
- if (wdb->name != NULL)
- free(wdb->name);
- wdb->name = strdup(name);
- if (wdb->name == NULL)
- return nerr_raise (NERR_NOMEM,
- "Unable to allocate memory to update name to %s", name);
- wdb->defn_dirty = 1;
- wdb->table_version = rand();
- }
- if (key != NULL && strcmp(wdb->key, key))
- {
- if (wdb->key != NULL)
- free(wdb->key);
- wdb->key = strdup(key);
- if (wdb->key == NULL)
- {
- wdb->defn_dirty = 0;
- return nerr_raise (NERR_NOMEM,
- "Unable to allocate memory to update key to %s", key);
- }
- wdb->defn_dirty = 1;
- wdb->table_version = rand();
- }
- return STATUS_OK;
-}
-
-NEOERR *wdb_create (WDB **wdb, const char *path, const char *name,
- const char *key, ULIST *col_def, int flags)
-{
- WDB *my_wdb;
- char d_path[_POSIX_PATH_MAX];
- NEOERR *err = STATUS_OK;
- int x, len, r;
- char *s;
-
- *wdb = NULL;
-
- err = wdb_alloc (&my_wdb, flags);
- if (err) return nerr_pass(err);
-
- my_wdb->name = strdup (name);
- my_wdb->key = strdup (key);
- my_wdb->path = strdup(path);
- if (my_wdb->name == NULL || my_wdb->key == NULL || my_wdb->path == NULL)
- {
- wdb_destroy (&my_wdb);
- return nerr_raise (NERR_NOMEM,
- "Unable to allocate memory for creation of %s", name);
- }
-
- /* ondisk must start at one because of skipList */
- my_wdb->last_ondisk = 1;
- len = uListLength(col_def);
- for (x = 0; x < len; x++)
- {
- err = uListGet (col_def, x, (void *)&s);
- if (err)
- {
- wdb_destroy (&my_wdb);
- return nerr_pass(err);
- }
- err = wdb_column_insert (my_wdb, -1, s, WDB_TYPE_STR);
- my_wdb->defn_dirty = 0; /* So we don't save on error destroy */
- if (err)
- {
- wdb_destroy (&my_wdb);
- return nerr_pass(err);
- }
- }
-
- err = wdb_save_defn (my_wdb, path);
- if (err)
- {
- wdb_destroy (&my_wdb);
- return nerr_pass(err);
- }
-
- snprintf (d_path, sizeof(d_path), "%s.wdb", path);
- r = db_open(d_path, DB_BTREE, DB_CREATE | DB_TRUNCATE, 0, NULL, NULL, &(my_wdb->db));
- if (r)
- {
- wdb_destroy (&my_wdb);
- return nerr_raise (NERR_DB, "Unable to create db file %s: %d", d_path, r);
- }
-
- *wdb = my_wdb;
-
- return STATUS_OK;
-}
-
-NEOERR *wdb_attr_next (WDB *wdb, char **key, char **value)
-{
- *value = (char *) dictNext (wdb->attrs, key, NULL);
-
- return STATUS_OK;
-}
-
-NEOERR *wdb_attr_get (WDB *wdb, const char *key, char **value)
-{
- void *v;
-
- v = dictSearch (wdb->attrs, key, NULL);
-
- if (v == NULL)
- return nerr_raise (NERR_NOT_FOUND, "Unable to find attr %s", key);
-
- *value = (char *)v;
-
- return STATUS_OK;
-}
-
-NEOERR *wdb_attr_set (WDB *wdb, const char *key, const char *value)
-{
- NEOERR *err = STATUS_OK;
- char *v;
-
- v = strdup(value);
- if (v == NULL)
- return nerr_raise (NERR_NOMEM, "No memory for new attr");
-
- err = dictSetValue(wdb->attrs, key, v);
- if (err)
- return nerr_pass_ctx (err, "Unable to set attr %s", key);
-
- wdb->defn_dirty = 1;
-
- return STATUS_OK;
-}
-
-NEOERR *wdbr_get (WDB *wdb, WDBRow *row, const char *key, void **value)
-{
- WDBColumn *col;
- void *v;
-
- col = (WDBColumn *) dictSearch (wdb->cols, key, NULL);
-
- if (col == NULL)
- return nerr_raise (NERR_NOT_FOUND, "Unable to find key %s", key);
-
- if (col->inmem_index-1 > row->data_count)
- return nerr_raise (NERR_ASSERT, "Index for key %s is greater than row data, was table altered?", key);
-
- v = row->data[col->inmem_index-1];
-
- *value = v;
-
- return STATUS_OK;
-}
-
-NEOERR *wdbr_set (WDB *wdb, WDBRow *row, const char *key, void *value)
-{
- WDBColumn *col;
-
- col = (WDBColumn *) dictSearch (wdb->cols, key, NULL);
-
- if (col == NULL)
- return nerr_raise (NERR_NOT_FOUND, "Unable to find key %s", key);
-
- if (col->inmem_index-1 > row->data_count)
- return nerr_raise (NERR_ASSERT, "Index for key %s is greater than row data, was table altered?", key);
-
- if (col->type == WDB_TYPE_STR && row->data[col->inmem_index-1] != NULL)
- {
- free (row->data[col->inmem_index-1]);
- }
- row->data[col->inmem_index-1] = value;
-
- return STATUS_OK;
-}
-
-static NEOERR *alloc_row (WDB *wdb, WDBRow **row)
-{
- WDBRow *my_row;
- int len;
-
- *row = NULL;
-
- len = uListLength (wdb->cols_l);
-
- my_row = (WDBRow *) calloc (1, sizeof (WDBRow) + len * (sizeof (void *)));
- if (my_row == NULL)
- return nerr_raise (NERR_NOMEM, "No memory for new row");
-
- my_row->data_count = len;
- my_row->table_version = wdb->table_version;
-
- *row = my_row;
-
- return STATUS_OK;
-}
-
-NEOERR *wdbr_destroy (WDB *wdb, WDBRow **row)
-{
- WDBColumn *col;
- WDBRow *my_row;
- int len, x;
- NEOERR *err;
-
- err = STATUS_OK;
- if (*row == NULL)
- return err;
-
- my_row = *row;
-
- /* Verify this row maps to this table, or else we could do something
- * bad */
-
- if (wdb->table_version != my_row->table_version)
- return nerr_raise (NERR_ASSERT, "Row %s doesn't match current table", my_row->key_value);
-
- if (my_row->key_value != NULL)
- free (my_row->key_value);
-
- len = uListLength(wdb->cols_l);
-
- for (x = 0; x < len; x++)
- {
- if (my_row->data[x] != NULL)
- {
- err = uListGet (wdb->cols_l, x, (void *)&col);
- if (err) break;
- switch (col->type)
- {
- case WDB_TYPE_INT:
- break;
- case WDB_TYPE_STR:
- free (my_row->data[x]);
- break;
- default:
- return nerr_raise (NERR_ASSERT, "Unknown type %d", col->type);
- }
- }
- }
-
- free (my_row);
- *row = NULL;
-
- return nerr_pass(err);
-}
-
-NEOERR *wdbr_lookup (WDB *wdb, const char *key, WDBRow **row)
-{
- DBT dkey, data;
- NEOERR *err = STATUS_OK;
- WDBRow *my_row;
- int r;
-
- *row = NULL;
-
- memset(&dkey, 0, sizeof(dkey));
- memset(&data, 0, sizeof(data));
-
- dkey.flags = DB_DBT_USERMEM;
- data.flags = DB_DBT_MALLOC;
-
- dkey.data = (void *)key;
- dkey.size = strlen(key);
-
- r = wdb->db->get (wdb->db, NULL, &dkey, &data, 0);
- if (r == DB_NOTFOUND)
- return nerr_raise (NERR_NOT_FOUND, "Unable to find key %s", key);
- else if (r)
- return nerr_raise (NERR_DB, "Error retrieving key %s: %d", key, r);
-
- /* allocate row */
- err = alloc_row (wdb, &my_row);
- if (err != STATUS_OK)
- {
- free (data.data);
- return nerr_pass(err);
- }
-
- my_row->key_value = strdup(key);
- if (my_row->key_value == NULL)
- {
- free (data.data);
- free (my_row);
- return nerr_raise (NERR_NOMEM, "No memory for new row");
- }
-
- /* unpack row */
- err = unpack_row (wdb, data.data, data.size, my_row);
- free (data.data);
- if (err)
- {
- free (my_row);
- return nerr_pass(err);
- }
-
- *row = my_row;
-
- return STATUS_OK;
-}
-
-NEOERR *wdbr_create (WDB *wdb, const char *key, WDBRow **row)
-{
- WDBRow *my_row;
- NEOERR *err = STATUS_OK;
-
- *row = NULL;
-
- /* allocate row */
- err = alloc_row (wdb, &my_row);
- if (err) return nerr_pass(err);
-
- my_row->key_value = strdup(key);
- if (my_row->key_value == NULL)
- {
- wdbr_destroy (wdb, &my_row);
- return nerr_raise (NERR_NOMEM, "No memory for new row");
- }
-
- *row = my_row;
-
- return STATUS_OK;
-}
-
-NEOERR *wdbr_save (WDB *wdb, WDBRow *row, int flags)
-{
- DBT dkey, data;
- int dflags = 0;
- NEOERR *err = STATUS_OK;
- int r;
-
- memset(&dkey, 0, sizeof(dkey));
- memset(&data, 0, sizeof(data));
-
- dkey.data = row->key_value;
- dkey.size = strlen(row->key_value);
-
- err = pack_row (wdb, row, &(data.data), &data.size);
- if (err != STATUS_OK) return nerr_pass(err);
-
- if (flags & WDBR_INSERT)
- {
- dflags = DB_NOOVERWRITE;
- }
-
- r = wdb->db->put (wdb->db, NULL, &dkey, &data, dflags);
- free (data.data);
- if (r == DB_KEYEXIST)
- return nerr_raise (NERR_DUPLICATE, "Key %s already exists", row->key_value);
- if (r)
- return nerr_raise (NERR_DB, "Error saving key %s: %d",
- row->key_value, r);
-
- return STATUS_OK;
-}
-
-NEOERR *wdbr_delete (WDB *wdb, const char *key)
-{
- DBT dkey;
- int r;
-
- memset(&dkey, 0, sizeof(dkey));
-
- dkey.flags = DB_DBT_USERMEM;
-
- dkey.data = (void *)key;
- dkey.size = strlen(key);
-
- r = wdb->db->del (wdb->db, NULL, &dkey, 0);
- if (r == DB_NOTFOUND)
- return nerr_raise (NERR_NOT_FOUND, "Key %s not found", key);
- else if (r)
- return nerr_raise (NERR_DB, "Error deleting key %s: %d", key, r);
-
-
- return STATUS_OK;
-}
-
-NEOERR *wdbr_dump (WDB *wdb, WDBRow *row)
-{
- int x;
-
- ne_warn ("version: %d", row->table_version);
- ne_warn ("key: %s", row->key_value);
- ne_warn ("count: %d", row->data_count);
- for (x=0; x < row->data_count; x++)
- ne_warn ("data[%d]: %s", x, row->data[x]);
-
- return STATUS_OK;
-}
-
-NEOERR *wdbc_create (WDB *wdb, WDBCursor **cursor)
-{
- DBC *db_cursor;
- WDBCursor *new_cursor;
- int r;
-
- *cursor = NULL;
-
-#if (DB_VERSION_MINOR==4)
- r = (wdb->db)->cursor (wdb->db, NULL, &db_cursor);
-#else
- r = (wdb->db)->cursor (wdb->db, NULL, &db_cursor, 0);
-#endif
- if (r)
- return nerr_raise (NERR_DB, "Unable to create cursor: %d", r);
-
- new_cursor = (WDBCursor *) calloc (1, sizeof (WDBCursor));
- if (new_cursor == NULL)
- {
- db_cursor->c_close (db_cursor);
- return nerr_raise (NERR_NOMEM, "Unable to create cursor");
- }
-
- new_cursor->table_version = wdb->table_version;
- new_cursor->db_cursor = db_cursor;
-
- *cursor = new_cursor;
-
- return STATUS_OK;
-}
-
-NEOERR *wdbc_destroy (WDB *wdb, WDBCursor **cursor)
-{
- if (*cursor != NULL)
- {
- (*cursor)->db_cursor->c_close ((*cursor)->db_cursor);
- free (*cursor);
- *cursor = NULL;
- }
- return STATUS_OK;
-}
-
-NEOERR *wdbr_next (WDB *wdb, WDBCursor *cursor, WDBRow **row, int flags)
-{
- DBT dkey, data;
- WDBRow *my_row;
- NEOERR *err = STATUS_OK;
- int r;
-
- *row = NULL;
-
- if (wdb->table_version != cursor->table_version)
- {
- return nerr_raise (NERR_ASSERT, "Cursor doesn't match database");
- }
-
- memset(&dkey, 0, sizeof(dkey));
- memset(&data, 0, sizeof(data));
- dkey.flags = DB_DBT_MALLOC;
- data.flags = DB_DBT_MALLOC;
-
- /* First call */
- if (flags & WDBC_FIRST)
- {
- r = cursor->db_cursor->c_get (cursor->db_cursor, &dkey, &data, DB_FIRST);
- if (r == DB_NOTFOUND)
- return nerr_raise (NERR_NOT_FOUND, "Cursor empty");
- else if (r)
- return nerr_raise (NERR_DB, "Unable to get first item from cursor: %d",
- r);
- }
- else
- {
- r = cursor->db_cursor->c_get (cursor->db_cursor, &dkey, &data, DB_NEXT);
- if (r == DB_NOTFOUND)
- return STATUS_OK;
- else if (r)
- return nerr_raise (NERR_DB, "Unable to get next item from cursor: %d", r);
- }
-
- /* allocate row */
- err = alloc_row (wdb, &my_row);
- if (err)
- {
- free (data.data);
- return nerr_pass(err);
- }
-
- my_row->key_value = (char *) malloc (dkey.size + 1);
- if (my_row->key_value == NULL)
- {
- free (data.data);
- free (my_row);
- return nerr_raise (NERR_NOMEM, "No memory for new row");
- }
-
- memcpy (my_row->key_value, dkey.data, dkey.size);
- my_row->key_value[dkey.size] = '\0';
-
- /* unpack row */
- err = unpack_row (wdb, data.data, data.size, my_row);
- free (data.data);
- free (dkey.data);
- if (err)
- {
- free (my_row);
- return nerr_pass(err);
- }
-
- *row = my_row;
-
- return STATUS_OK;
-}
-
-NEOERR *wdbr_find (WDB *wdb, WDBCursor *cursor, const char *key, WDBRow **row)
-{
- DBT dkey, data;
- WDBRow *my_row;
- NEOERR *err = STATUS_OK;
- int r;
-
- *row = NULL;
-
- if (wdb->table_version != cursor->table_version)
- {
- return nerr_raise (NERR_ASSERT, "Cursor doesn't match database");
- }
-
- memset(&dkey, 0, sizeof(dkey));
- memset(&data, 0, sizeof(data));
- dkey.flags = DB_DBT_USERMEM;
- data.flags = DB_DBT_MALLOC;
-
- dkey.data = (void *)key;
- dkey.size = strlen(key);
-
- r = cursor->db_cursor->c_get (cursor->db_cursor, &dkey, &data, DB_SET_RANGE);
- if (r == DB_NOTFOUND)
- return STATUS_OK;
- else if (r)
- return nerr_raise (r, "Unable to get find item for key %s", key);
-
- /* allocate row */
- err = alloc_row (wdb, &my_row);
- if (err)
- {
- free (data.data);
- return nerr_pass(err);
- }
-
- my_row->key_value = (char *) malloc (dkey.size + 1);
- if (my_row->key_value == NULL)
- {
- free (data.data);
- free (my_row);
- return nerr_raise (NERR_NOMEM, "No memory for new row");
- }
-
- memcpy (my_row->key_value, dkey.data, dkey.size);
- my_row->key_value[dkey.size] = '\0';
-
- /* unpack row */
- err = unpack_row (wdb, data.data, data.size, my_row);
- free (data.data);
- if (err)
- {
- free (my_row);
- return nerr_pass(err);
- }
-
- *row = my_row;
-
- return STATUS_OK;
-}
-
-NEOERR *wdb_keys (WDB *wdb, char **primary_key, ULIST **data)
-{
- NEOERR *err;
- int x, len;
- WDBColumn *col;
- ULIST *my_data;
- char *my_key = NULL;
- char *my_col = NULL;
-
- *data = NULL;
- *primary_key = NULL;
- my_key = strdup(wdb->key);
- if (my_key == NULL)
- return nerr_raise (NERR_NOMEM, "Unable to allocate memory for keys");
-
- len = uListLength(wdb->cols_l);
- err = uListInit (&my_data, len, 0);
- if (err != STATUS_OK)
- {
- free(my_key);
- return nerr_pass(err);
- }
-
- for (x = 0; x < len; x++)
- {
- err = uListGet (wdb->cols_l, x, (void *)&col);
- if (err) goto key_err;
- my_col = strdup(col->name);
- if (my_col == NULL)
- {
- err = nerr_raise (NERR_NOMEM, "Unable to allocate memory for keys");
- goto key_err;
- }
- err = uListAppend (my_data, my_col);
- my_col = NULL;
- if (err) goto key_err;
- }
-
- *data = my_data;
- *primary_key = my_key;
- return STATUS_OK;
-
-key_err:
- if (my_key != NULL) free (my_key);
- if (my_col != NULL) free (my_col);
- *primary_key = NULL;
- uListDestroy (&my_data, 0);
- return nerr_pass(err);
-}
-
-/*
- * Known Issues:
- * - Probably need to store the actual key value in the packed row..
- * Maybe not, because any cursor you use on a sleepycat db will
- * return the key...
- * - um, memory. Especially when dealing with rows, need to keep track
- * of when we allocate, when we dealloc, and who owns that memory to
- * free it
- * - function to delete entry from wdb
- */
diff --git a/util/wdb.h b/util/wdb.h
deleted file mode 100644
index 5e8c8f9..0000000
--- a/util/wdb.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright 2001-2004 Brandon Long
- * All Rights Reserved.
- *
- * ClearSilver Templating System
- *
- * This code is made available under the terms of the ClearSilver License.
- * http://www.clearsilver.net/license.hdf
- *
- */
-
-#ifndef __WDB_H_
-#define __WDB_H_ 1
-
-#include "util/skiplist.h"
-#include "util/dict.h"
-#include "util/ulist.h"
-#include <db.h>
-
-typedef struct _column
-{
- char *name;
- int ondisk_index; /* index# on disk, constant for life of db,
- must be 1 or higher */
- int inmem_index; /* load time specific, needs to be flushed on
- alter table */
- char type;
-} WDBColumn;
-
-typedef struct _row
-{
- int table_version; /* random number which maps to the same number
- of the table defn when loaded to verify they
- match */
- char *key_value;
- int data_count;
- void *data[1];
-} WDBRow;
-
-typedef struct _cursor
-{
- int table_version; /* random number which maps to the same number
- of the table defn when loaded to verify they
- match */
- DBC *db_cursor;
-} WDBCursor;
-
-typedef struct _wdb
-{
- char *name;
- char *key;
- char *path;
- dictCtx attrs;
- dictCtx cols;
- skipList ondisk;
- ULIST *cols_l;
- DB *db;
- int last_ondisk;
- int defn_dirty; /* must save defn on destroy */
- int table_version; /* random number which maps to the same number
- of the table defn when loaded/changed to
- verify they match */
-} WDB;
-
-
-#define WDB_TYPE_STR 's'
-#define WDB_TYPE_INT 'i'
-
-#define WDBC_FIRST (1<<0)
-#define WDBC_NEXT (1<<1)
-#define WDBC_FIND (1<<2)
-
-#define WDBR_INSERT (1<<0)
-
-NEOERR * wdb_open (WDB **wdb, const char *name, int flags);
-NEOERR * wdb_save (WDB *wdb);
-NEOERR * wdb_update (WDB *wdb, const char *name, const char *key);
-NEOERR * wdb_create (WDB **wdb, const char *path, const char *name,
- const char *key, ULIST *col_def, int flags);
-void wdb_destroy (WDB **wdb);
-NEOERR * wdb_column_insert (WDB *wdb, int loc, const char *key, char type);
-NEOERR * wdb_column_delete (WDB *wdb, const char *name);
-NEOERR * wdb_column_update (WDB *wdb, const char *oldkey, const char *newkey);
-NEOERR * wdb_column_exchange (WDB *wdb, const char *key1, const char *key2);
-
-/*
- * function: wdb_keys
- * description: this function returns the key and column names for the
- * current database
- * input: wdb - open database
- * output: primary_key - pointer to the primary key
- * data - pointer to a ULIST of the columns.
- * both of these are allocated structures, you can clear data
- * with uListDestroy (data, ULIST_FREE)
- * return: STATUS_OK on no error or egerr.h error
- */
-NEOERR * wdb_keys (WDB *wdb, char **primary_key, ULIST **data);
-
-NEOERR * wdb_attr_get (WDB *wdb, const char *key, char **value);
-NEOERR * wdb_attr_set (WDB *wdb, const char *key, const char *value);
-NEOERR * wdb_attr_next (WDB *wdb, char **key, char **value);
-NEOERR * wdbr_lookup (WDB *wdb, const char *key, WDBRow **row);
-NEOERR * wdbr_create (WDB *wdb, const char *key, WDBRow **row);
-NEOERR * wdbr_save (WDB *wdb, WDBRow *row, int flags);
-NEOERR * wdbr_delete (WDB *wdb, const char *key);
-NEOERR * wdbr_destroy (WDB *wdb, WDBRow **row);
-NEOERR * wdbr_get (WDB *wdb, WDBRow *row, const char *key, void **value);
-NEOERR * wdbr_set (WDB *wdb, WDBRow *row, const char *key, void *value);
-NEOERR * wdbr_dump (WDB *wdb, WDBRow *row);
-NEOERR * wdbr_next (WDB *wdb, WDBCursor *cursor, WDBRow **row, int flags);
-NEOERR * wdbr_find (WDB *wdb, WDBCursor *cursor, const char *key, WDBRow **row);
-NEOERR * wdbc_create (WDB *wdb, WDBCursor **cursor);
-NEOERR * wdbc_destroy (WDB *wdb, WDBCursor **cursor);
-
-#endif /* __WDB_H_ */
diff --git a/util/wildmat.c b/util/wildmat.c
deleted file mode 100644
index 85e7b2f..0000000
--- a/util/wildmat.c
+++ /dev/null
@@ -1,207 +0,0 @@
-/* $Revision: 1.2 $
- **
- ** Do shell-style pattern matching for ?, \, [], and * characters.
- ** Might not be robust in face of malformed patterns; e.g., "foo[a-"
- ** could cause a segmentation violation. It is 8bit clean.
- **
- ** Written by Rich $alz, mirror!rs, Wed Nov 26 19:03:17 EST 1986.
- ** Rich $alz is now <rsalz@osf.org>.
- ** April, 1991: Replaced mutually-recursive calls with in-line code
- ** for the star character.
- **
- ** Special thanks to Lars Mathiesen <thorinn@diku.dk> for the ABORT code.
- ** This can greatly speed up failing wildcard patterns. For example:
- ** pattern: -*-*-*-*-*-*-12-*-*-*-m-*-*-*
- ** text 1: -adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1
- ** text 2: -adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1
- ** Text 1 matches with 51 calls, while text 2 fails with 54 calls. Without
- ** the ABORT code, it takes 22310 calls to fail. Ugh. The following
- ** explanation is from Lars:
- ** The precondition that must be fulfilled is that DoMatch will consume
- ** at least one character in text. This is true if *p is neither '*' nor
- ** '\0'.) The last return has ABORT instead of FALSE to avoid quadratic
- ** behaviour in cases like pattern "*a*b*c*d" with text "abcxxxxx". With
- ** FALSE, each star-loop has to run to the end of the text; with ABORT
- ** only the last one does.
- **
- ** Once the control of one instance of DoMatch enters the star-loop, that
- ** instance will return either TRUE or ABORT, and any calling instance
- ** will therefore return immediately after (without calling recursively
- ** again). In effect, only one star-loop is ever active. It would be
- ** possible to modify the code to maintain this context explicitly,
- ** eliminating all recursive calls at the cost of some complication and
- ** loss of clarity (and the ABORT stuff seems to be unclear enough by
- ** itself). I think it would be unwise to try to get this into a
- ** released version unless you have a good test data base to try it
- ** out on.
- */
-
-#include "cs_config.h"
-
-#include <ctype.h>
-#include "neo_misc.h"
-
-#define ABORT -1
-
-
- /* What character marks an inverted character class? */
-#define NEGATE_CLASS '^'
- /* Is "*" a common pattern? */
-#define OPTIMIZE_JUST_STAR
- /* Do tar(1) matching rules, which ignore a trailing slash? */
-#undef MATCH_TAR_PATTERN
-
-
-/*
- ** Match text and p, return TRUE, FALSE, or ABORT.
- */
- static int
-DoMatch(register const char *text, register const char *p)
-{
- register int last;
- register int matched;
- register int reverse;
-
- for ( ; *p; text++, p++) {
- if (*text == '\0' && *p != '*')
- return ABORT;
- switch (*p) {
- case '\\':
- /* Literal match with following character. */
- p++;
- /* FALLTHROUGH */
- default:
- if (*text != *p)
- return FALSE;
- continue;
- case '?':
- /* Match anything. */
- continue;
- case '*':
- while (*++p == '*')
- /* Consecutive stars act just like one. */
- continue;
- if (*p == '\0')
- /* Trailing star matches everything. */
- return TRUE;
- while (*text)
- if ((matched = DoMatch(text++, p)) != FALSE)
- return matched;
- return ABORT;
- case '[':
- reverse = p[1] == NEGATE_CLASS ? TRUE : FALSE;
- if (reverse)
- /* Inverted character class. */
- p++;
- matched = FALSE;
- if (p[1] == ']' || p[1] == '-')
- if (*++p == *text)
- matched = TRUE;
- for (last = *p; *++p && *p != ']'; last = *p)
- /* This next line requires a good C compiler. */
- if (*p == '-' && p[1] != ']'
- ? *text <= *++p && *text >= last : *text == *p)
- matched = TRUE;
- if (matched == reverse)
- return FALSE;
- continue;
- }
- }
-
-#ifdef MATCH_TAR_PATTERN
- if (*text == '/')
- return TRUE;
-#endif /* MATCH_TAR_ATTERN */
- return *text == '\0';
-}
-
-
-/*
- ** Match text and p, return TRUE, FALSE, or ABORT.
- */
-static int
-DoMatchCaseInsensitive(register const char *text, register const char *p)
-{
- register int last;
- register int matched;
- register int reverse;
-
- for ( ; *p; text++, p++) {
- if (*text == '\0' && *p != '*')
- return ABORT;
- switch (*p) {
- case '\\':
- /* Literal match with following character. */
- p++;
- /* FALLTHROUGH */
- default:
- if (toupper(*text) != toupper(*p))
- return FALSE;
- continue;
- case '?':
- /* Match anything. */
- continue;
- case '*':
- while (*++p == '*')
- /* Consecutive stars act just like one. */
- continue;
- if (*p == '\0')
- /* Trailing star matches everything. */
- return TRUE;
- while (*text)
- if ((matched = DoMatchCaseInsensitive(text++, p)) != FALSE)
- return matched;
- return ABORT;
- case '[':
- reverse = p[1] == NEGATE_CLASS ? TRUE : FALSE;
- if (reverse)
- /* Inverted character class. */
- p++;
- matched = FALSE;
- if (p[1] == ']' || p[1] == '-')
- if (toupper(*++p) == toupper(*text))
- matched = TRUE;
- for (last = toupper(*p); *++p && *p != ']'; last = toupper(*p))
- /* This next line requires a good C compiler. */
- if (*p == '-' && p[1] != ']'
- ? toupper(*text) <= toupper(*++p) && toupper(*text) >= last : toupper(*text) == toupper(*p))
- matched = TRUE;
- if (matched == reverse)
- return FALSE;
- continue;
- }
- }
-
-#ifdef MATCH_TAR_PATTERN
- if (*text == '/')
- return TRUE;
-#endif /* MATCH_TAR_ATTERN */
- return *text == '\0';
-}
-
-
-/*
- ** User-level routine. Returns TRUE or FALSE.
- */
-int
-wildmat(const char *text, const char *p)
-{
-#ifdef OPTIMIZE_JUST_STAR
- if (p[0] == '*' && p[1] == '\0')
- return TRUE;
-#endif /* OPTIMIZE_JUST_STAR */
- return DoMatch(text, p) == TRUE;
-}
-
-/*
- ** User-level routine. Returns TRUE or FALSE.
- */
-int
-wildmatcase(const char *text, const char *p)
-{
-#ifdef OPTIMIZE_JUST_STAR
- if (p[0] == '*' && p[1] == '\0')
- return TRUE;
-#endif /* OPTIMIZE_JUST_STAR */
- return DoMatchCaseInsensitive(text, p) == TRUE;
-}
diff --git a/util/wildmat.h b/util/wildmat.h
deleted file mode 100644
index 7cd316d..0000000
--- a/util/wildmat.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Copyright (C) 1986-1991 Rich Salz <rsalz@osf.org>
- *
- */
-
-#ifndef __WILDMAT_H_
-#define __WILDMAT_H_ 1
-
-__BEGIN_DECLS
-
-int wildmat(const char *text, const char *p);
-int wildmatcase(const char *text, const char *p);
-
-__END_DECLS
-
-#endif /* __WILDMAT_H_ */